텍스트 편집기로 Emacs를 사용하여 강력한 Python IDE를 작성하는 방법


56

Emacs는 훌륭한 편집기입니다. 그러나 " 먼저 IDE를 필요로하는 프로그램 "이라고합니다. 따라서 최신 IDE의 모든 기능을 사용하여 PYTHON 용 광범위하게 사용자 정의 가능한 Emacs에서 IDE를 어떻게 구축 할 수 있습니까? 코드를 효과적으로 디버깅, 실행 및 컴파일하고 관리 할 수 ​​있기를 원합니다. 지금까지 나는 Elpy 패키지를 설치 한 주제를 읽었지만 이것을 가능하게하기 위해 알아야 할 것과 다른 일이 확실하지 않습니다.


4
좀 더 구체적으로 말씀해 주시겠습니까? "IDE"는 모든 종류의 기능을위한 유행어가되었습니다.
wasamasa

나는 당신이 Emacs를 처음 접한다고 생각합니다. 그리고 당신은 나의 Helm and Helm Projectile 안내서 를보고 싶을 것 입니다.
Tu Do

2
"이맥스 파이썬 IDE"에 대한 구글 검색 히트의 공정 수를 제공합니다. 이미 시도한 것이 무엇이며 아직 만족스럽지 않은 것을 명확히 할 수 있습니까?
Dan

1
이 질문은 너무 광범위하기 때문에 주제를 벗어난 주제로 닫으려고합니다.
Drew

4
IDE는 유용 할 수 있지만 "먼저 IDE를 필요로 프로그래밍하는"것은 어리석은 일입니다. IDE가 있기 전에 많은 좋은 코드가 작성되었습니다.
offby1

답변:


57

Emacs의 기본 Python 모드에는 열등한 Python 셸을 기반으로 한 코드 완성을 포함하여 여러 가지 기능이 있으므로 패키지를 추가하지 않고도 기본 IDE로 사용할 수 있습니다. 다른 핵심 Emacs 함수도 Python과 함께 사용할 수 있습니다. 예를 들어, M-x compile/ M-x recompile를 사용하여 테스트를 실행할 수 있습니다. M-x pdbPython 디버거를 실행할 수 있으며 Emacs의 gud 환경 과 통합되어 실제로 인라인 중단 점을 얻습니다.

이를 확장하기 위해 Emacs를위한 세 가지 주요 패키지가 있습니다.

그들은 모두 거의 동일한 기능을 제공합니다.

  • 자동 완성 또는 회사 모드를 사용하여 코드 완성
  • 코드 탐색, 즉 정의 / 사용법으로 이동
  • ElDoc을 사용한 기능 서명 표시
  • 지점의 기호에 대한 설명서 검사
  • flymake 또는 flycheck를 사용한 구문 검사
  • 그리고 그들 중 일부 (적어도 Elpy)는 기본 리팩토링 지원을 가지고 있습니다.

이 외에도 Emacs는 많은 워크 플로우를 지원할 수 있지만 단일 워크 플로우를 규정하지는 않습니다. 따라서 다음 단계는 파이썬을 어떻게 사용하고 있는지에 달려 있습니다. 여기서 가장 좋은 방법은 좋은 Python 워크 플로를 파악한 다음 워크 플로 단계를 구체적으로 도와주는 Emacs 패키지를 찾는 것입니다.

예를 들어 virtualenvs (Elpy, pyvenv와 함께 제공)와 함께 사용할 수있는 여러 패키지가 있습니다. Emacs-Jedi에는 유용한 코드 탐색 모드 가 있습니다. IPython을 많이 사용하는 경우 Emacs 용 IPython Notebook 이 있습니다. Django 개발 등을위한 특별 지원 모드가 있습니다. http://melpa.org/ 로 이동하여 Python을 검색하여 아이디어를 얻을 수 있습니다.

파이썬 이외의 경우 일반적으로 개발에 도움이되는 몇 가지 추가 Emacs 패키지를 활용할 수 있습니다. Projectile 은 프로젝트 관리를위한 일반적인 패키지로, 프로젝트 검색 또는 테스트와 구현 간 이동과 같은 여러 가지 흥미로운 기능을 제공합니다. 선택한 IDE 패키지의 종속성으로 아직 설치되지 않은 경우 코드 생성을위한 지능형 스 니펫을 제공 하는 YASnippet 을 사용할 수도 있습니다 . 기본 스 니펫 컬렉션에는 Python에 대한 많은 스 니펫도 있습니다.

그러나 위의 주요 IDE 패키지는 정상적인 환경을 제공합니다. 다음 단계는 특정 워크 플로에 따라 크게 다릅니다.

(전체 공개 : 저는 Elpy의 저자이므로 위의 내용을 읽을 때이를 고려하십시오.)


1
이러한 포괄적 인 답변에 대해 대단히 감사합니다. 수많은 기사가 없었던 방식으로 광범위하게 유용하다는 것이 입증되었습니다.
Serial Exchangist

2
감사합니다 @Jorgen. 나는 elpy매일 사용 하고 " M-x pdbPython 디버거를 실행할 수 있습니다 " 라고 말할 때 대답에 대한 빠른 질문 이 있습니다. 파이썬 버퍼가 있는데 미니 버퍼에 M-x pdb라는 메시지가 나타납니다 "Run pdb (like this): pdb my_file.py". 나는 누르면 RET: 나는 "ImportError를을 : 없음 모듈 이름 pdb.pdb을 'PDB 패키지 아니다"얻을이 날을 제공하는 PIP와 PDB를 업그레이드 한 후 최신 파이썬 3.4 함께$ pip freeze | grep pdb => pdb==0.1
아멜리오 바스케스 - 레이나

1
Pdb는 Python과 함께 제공됩니다. 왜 그것이 발견되지 않을지 모르겠습니다. :-(
Jorgen Schäfer

@ JorgenSchäfer pdb가 발견되지 않았지만 python로컬에서 발견되면 다음 M-x pdb과 같이 사용하여 pdb를 실행할 수 있습니다. "pdb 실행 (이와 같이) : python -m pdb my_file.py`
ChrisFreeman

또한 스핑크스 -doc 패키지가 docstring을 작성하는 데 유용하다는 것을 알았습니다.
aadcg

17

악의적 인 사용자가 spacemacs 를 시도하도록 권장 합니다.

그것은 화려한 파이썬 레이어를 가지고 있습니다 : https://github.com/syl20bnr/spacemacs/tree/master/layers/!lang/python

현재로서는 다음이 포함됩니다.

  • 아나콘다 모드를 사용한 자동 완성
  • 아나콘다 모드를 사용한 코드 탐색
  • 아나콘다 모드와 pylookup을 사용한 문서 조회
  • nose.el 또는 pytest를 사용하여 테스트 러너
  • pyvenv를 사용하는 가상 환경
  • 시맨틱 모드가 활성화되었습니다
  • 조랑말 모드를 통한 장고 지원

설치는 엄청나게 쉽습니다. 다음 줄을 추가하십시오 ~/.spacemacs.

(setq-default dotspacemacs-configuration-layers '(python))

.spacemacs에서 정확히 이것을 추가 해야하는 호기심에서? 최고입니까? 이전 (defun dotspacemacs / layers () ...?
user391339 21시 12 분

라는 목록이 dotspacemacs-configuration-layers있습니다. 거기에 추가 :)
The Unfun Cat

4

purpose-mode 사용 합니다 . 이를 통해 매우 견고한 환경을 정의 할 수 있습니다.

사용 elpy, pydoc그리고 neotree나는 (창 오류에 이상한 일을하지 않는 의미에서) 매우 강력한 환경을 가지고있다. 이것은 gud-pdb디버깅 에도 잘 작동 합니다.

neotree, python-mode, pydoc 및 열등한 python (elpy를 통한)을 사용하여 python을위한 emacs 목적 설정


4

포괄적 인 안내서는 다음과 같습니다. http://wikemacs.org/wiki/Python 바로 사용 가능한 솔루션 (Prelude 스타터 키트 , Spacemacs, 데이터 과학 솔루션 등 ), 유용한 패키지 (Elpy) 등을 나열합니다. 모든 패키지로 환경을 개선해야합니다. 개요 는 다음과 같습니다 .

리팩토링

가장 "IDE 별"기능입니다. Rope python 라이브러리 덕분에 이맥스가 가능합니다. 설치 및 사용하는 가장 쉬운 방법은 MELPAemacs-traad 패키지입니다. 다음과 같은 특징이 있습니다.

  • 메소드 서명 변경 : 프로젝트 간 리팩토링 (물론)과 함께 인수 추가 / 제거,
  • 이름을 바꾸고
  • 정의 찾기,…

로프는 Elpy에도 포함되어 있습니다.

간단한 코드 조작

리팩토링 또는 코드 조작에 도움이되는 더 간단한 도구가 있습니다. http://wikemacs.org/wiki/Python#Other_Python_.22refactoring.22_tools

예를 들어, Projectile은 훌륭합니다 (다른 답변 참조). 데코레이터추가하고 , 인수를 추가 / 제거 / 편집 하고, 메소드의 이름을 바꾸거나 / 복사 / 코멘트 / 킬 / 킬하기위한 도구, 코드 생성 도구 등이 있습니다.

코드 탐색

태그와 cscope를 사용하여 IDE로 탐색 할 수 있습니다.이 함수를 호출하는 함수 찾기, 발생 찾기 등

Emacs에는 imenu (helm-imenu), helm-swoop (버퍼의 대화식 grep), emacs-helm-ag (프로젝트의 대화식 silver searcher ) 등과 같은 훌륭한 패키지가 있습니다 .

테스트 실행

django 러너, elpy 또는 다른 테스트를 사용하여 테스트를 실행하는 데 도움이되는 것은 Elpy입니다. 현재있는 단위 테스트 만 실행할 수도 있습니다. 매우 편리합니다! 그래서 그것을 도와주는 Hydra가 있습니다 (오류 사이의주기, 파이썬 프롬프트로 전환하십시오 ...).

지원하다

이것은 Python에만 국한되지 않는 Emacs 패키지입니다. 그러나 나는 프로젝트의 어느 곳에서나 make target을 실행 하고 make 명령을 완성 하는 것을 좋아한다 . 링크

들여 쓰기 다루기

약간의 패키지가있다 들여 쓰기-도구 , 즉 명령 들여 쓰기 블록과 직접 작업 할 수 있습니다 : 이동 들여 쓰기의 다음-이전 아동 부모 블록, 들여 쓰기 / deindent / 의견 / 복사 / 현재 블록을 배 / 죽 , yaml 및 Python에도 적합합니다. 문서 및 gif 데모

장고 지원

장고 참조 . Elpy 는 장고 러너를 지원합니다. elpy django doc 참조하십시오 . django-mode (melpa)는 템플릿 강조, 빠른 명령, 관리 명령 완성 ,…

중요한 Git, Github 및 Gitlab 지원

magithub 는 github PR을 생성하고, 이슈를 가져 와서 커밋 메시지에 참조를 삽입 할 수 있습니다. magit 는 훌륭합니다 …… http://wikemacs.org/wiki/Git


특히 규모가 크거나 불완전한 프로젝트에서 리팩토링은 무언가를 깨뜨리지 않는 것이 중요합니다. 누군가 Spacemacs로 emacs-traad를 설정하는 방법을 알고 있습니까?
thinwybk

1

여기에 대한 답변은 spacemacs가 제공하는 대부분의 중요한 기능을 제공했지만 항상 찾을 수 없었던 한 가지 기능이있었습니다. DEBUGGING (최근까지 Spacemac과 잘 어울리는 디버깅 도구를 찾지 못했습니다)

그러면 내 스페이스 맥에 대한 디버그 워크 플로우를 어떻게 설정 했습니까?

realgud.el 패키지를 사용하여 spacemacs의 디버그 경험과 같은 IDE에 가까운 기능을 제공하는 기능 분기가 있습니다. https://github.com/CeleritasCelery/spacemacs 이 분기를 .emacs로 가져 오기만 하면됩니다. d 디렉토리에서 ~ / .emacs.d / layers / + lang / python / packages.el 파일을 변경하십시오.

디버그를 위해 spacemacs를 설정하는 자세한 단계 (심호흡)

  1. 터미널에 아래 명령을 하나씩 입력하십시오. 이렇게하면 'debug-layer'라는 별도의 분기에 CeleritaCelery의 spacemacs 변경 사항이 추가됩니다. 이것은 무언가가 엉망이되면 항상 마스터 브랜치와 짜잔을 체크 아웃 할 수 있다는 것을 의미합니다! 원래 우주인이 돌아 왔습니다!

remote add debug-layer https://github.com/CeleritasCelery/spacemacs fetch debug-layer checkout --track debug-layer/debug-layer branch -a

  1. 이제 ~ / .emacs.d / layers / + lang / python / packages.el을 ;; configure trepan3k as the python debugger to be used with realgud (defun python/pre-init-realgud() (dolist (mode '(anaconda-mode)) ;; bind trepan3k with anaconda mode (spacemacs|add-realgud-debugger mode "trepan3k"))) 열고 파일 끝에 아래 함수를 추가하십시오. 이 함수는 trepan3k 디버거를 파이썬 디버거로 사용합니다. pdb 또는 ipdb 또는 원하는 디버거로 값을 변경할 수 있습니다. trepan3k를 사용할 계획이라면 sudo pip install trepan3kpython 배포판에 사전 설치되어 있지 않으므로 pip 로 설치하십시오.

  2. 이제 다음과 같이 dotspacemacs-configuration-layers 내에서 .spacemacs 파일과 'debug'레이어를여십시오. dotspacemacs-configuration-layers '( (python :variables python-enable-yapf-format-on-save t flycheck-disabled-checkers '(python-flake8) flycheck-checker 'python-pylint ) debug )

  3. 그런 다음 spacemacs를 다시 시작하고 파이썬 파일을여십시오. Mx realgud : trepan3k를 입력하여 디버깅을 시작할 수 있습니다

이것은 디버그 세션을 시작하고 여기에 설명 된 realgud 키 바인딩을 사용하여 중단 점을 추가하고 삭제할 수 있습니다 : https://github.com/realgud/realgud#source-window-commands

끝났습니다!


위의 clyton의 답변에서 git repo는 github.com/CeleritasCelery/debug-layer 여야합니다 . 이를위한 PR은 현재 열려있는 github.com/syl20bnr/spacemacs/pull/9246
Oddbodbloke

(나는 평판이 부족하여 언급 할 수 없다) 위의 내용은 spacemacs의 개발 지점으로 병합되었으므로 1 단계는 무시할 수 있습니다.
Oddbodbloke
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.