Emacs ile sağlam bir Python IDE'yi nasıl yaratırsınız (Metin editörü olarak)


56

Emacs mükemmel bir editördür - ancak " önce bir IDE'ye ihtiyacınız olduğunu programlamak için " denir - bu nedenle modern IDE'nin tüm özelliklerine sahip PYTHON için kapsamlı şekilde özelleştirilebilir Emac'larda nasıl bir IDE oluşturabilirsiniz? Kodu etkin bir şekilde ayıklamak, çalıştırmak ve derlemek ve yönetebilmek istiyorum. Şimdiye kadar Elpy paketini kurduğum konuyu okudum, ancak bunu mümkün kılmak için başka ne bilmesi ve ne yapması gerektiğinden emin değilim.


4
Lütfen daha spesifik olabilir misiniz? "IDE" her türlü özellik için bir terim ve yakalama çantası haline geldi.
wasamasa

Sanırım Emacs'ta yenisin ve Helm ve Helm Mermi rehberime bakmak isteyebilirsin .
Tu

2
"Emacs python ide" için bir google araması , çok sayıda isabet verir. Neyi denediğinizi ve henüz tatmin edici olmayan şeyleri netleştirebilir misiniz?
Dan

1
Bu soruyu konu dışı olarak kapatmak için oy kullanıyorum çünkü çok geniş.
Drew

4
IDE'ler faydalı olabilir, ancak "önce bir IDE'ye ihtiyacınız olduğunu programlamak için" aptalca. IDE'ler olmadan önce pek çok iyi kod yazılmıştı.
offby1

Yanıtlar:


57

Emacs'taki varsayılan Python modu, alt Python kabuğunu temel alan kod tamamlama dahil birçok özelliğe sahiptir, böylece herhangi bir ek paket olmadan temel IDE olarak kullanılabilir. Python ile diğer çekirdek Emac işlevlerini de kullanabilirsiniz. Örneğin, testleri çalıştırmak için M-x compile/ M-x recompilekullanılabilir. M-x pdbPython hata ayıklayıcısını çalıştırabilir ve Emacs'in gud ortamına entegre olur, böylece gerçekten satır içi kesme noktaları elde edersiniz.

Bunu genişletmek için, daha özellikli bir Python IDE (alfabetik sıraya göre) uygulamaya çalışan Emacs için üç ana paket vardır:

Hepsi kabaca aynı özellikleri sunar:

  • Otomatik tamamlama veya şirket kipini kullanarak kod tamamlama
  • Kod gezinme, tanım / kullanımlara gider
  • ElDoc kullanarak fonksiyon imzası göstergesi
  • Sembolün üzerinde noktaya dökümantasyon incelemesi
  • Sözdizimi flymake veya flycheck kullanarak denetler
  • Ve bazıları (en azından Elpy) temel refactoring desteğine sahipler.

Bunların ötesinde, Emacs size birçok iş akışında da yardımcı olabilir, ancak herhangi birini açıklamıyor. Dolayısıyla bir sonraki adımlar Python'u nasıl kullandığınıza bağlı. Buradaki en iyi yaklaşım, iyi bir Python iş akışı bulmak ve ardından özellikle iş akışınızdaki adımlarla size yardımcı olacak Emacs paketlerini bulmaya çalışmak olacaktır.

Örneğin, sanalençlerle (bahsettiğiniz Elpy, pyvenv ile birlikte gelir) kullanmanız gereken birden fazla paket var. Emacs-Jedi, kod tarama için faydalı olabilecek eşlik eden bir moda sahiptir . IPython'u çok kullanıyorsanız, Emacs için bir IPython Not Defteri var . Django geliştirme vb. İçin özel destek modları var - http://melpa.org/ adresine gidip bazı fikirler almak için Python'u arayabilirsiniz.

Python dışında, genel olarak geliştirmeye yardımcı olan bazı ekstra Emacs paketlerinden yararlanabilirsiniz. Mermi bir projede ararken veya testler ve uygulamalar arasında hareket gibi, size ilginç bir dizi özellik verir proje yönetimi için genel bir pakettir. Seçtiğiniz IDE paketine bağımlılık olarak kurulmamışsa, kod oluşturma için akıllı snippet'ler sağlayan YASnippet'i de kullanabilirsiniz . Varsayılan kod parçası koleksiyonunda Python için de çok sayıda parça bulunur.

Fakat yine de, yukarıdaki ana IDE paketleri size aklı başında bir ortam sağlayacaktır - bir sonraki adımlar büyük ölçüde özel iş akışlarınıza bağlıdır.

(Tam açıklama: Elpy'nin yazarıyım, bu yüzden yukarıdakileri okurken bunu dikkate alın.)


1
Böyle kapsamlı bir cevap için çok teşekkür ederim, sayısız makalede bulunmadığı yollarla oldukça faydalı oldu.
Seri Alışkanlık

2
@Jorgen'e teşekkürler. Kullandığım elpygünlük ve bunu söylerken, Cevabınız hakkında hızlı bir sorum var " M-x pdbPython hata ayıklayıcı çalıştırabilir" , bu nasıl tam olarak? Bir Python arabelleğim var ve yaptığım zaman şunu M-x pdbsöyleyen minibuffer'da bir bilgi istemiştim "Run pdb (like this): pdb my_file.py". Ben bastığınızda RET: Ben "ImportError: Hiçbir modül adlı pdb.pdb: 'pdb bir paket değil" olsun bu sadece beni veren pip ile Pdb yükselttikten sonra en son Python 3.4 ile$ pip freeze | grep pdb => pdb==0.1
Amelio Vazquez-Reina

1
Pdb Python ile birlikte gelir. Neden bulunamayacağına dair hiçbir fikrim yok, korkarım. :-(
Jorgen Schäfer

Eğer @ JorgenSchäfer pdbbulunmazsa, ancak pythonlokal olarak bulunursa, o zaman kullanarak Pdb çalıştırabilirsiniz M-x pdbpiton -m Pdb my_file.py`: o zaman (bu şekilde) "Run Pdb
ChrisFreeman

Ayrıca sfenks-doc paketini dokümanlar yazmak için faydalı buluyorum.
aadcg

17

Kötü-emacs kullanıcıları boşlukları denemeye teşvik ediyorum .

Parlak bir python-katmanı var, burada detayları görün: https://github.com/syl20bnr/spacemacs/tree/master/layers/!lang/python

Şu an itibariyle, şunları içeriyor:

  • Anaconda modunu kullanarak otomatik tamamlama
  • Anaconda modunu kullanarak Kod Gezinme
  • Anaconda-mode ve pylookup kullanarak dökümantasyon arama
  • Nose.el veya pytest kullanarak Test Runner
  • Pyvenv kullanarak sanal ortam
  • Anlamsal mod etkin
  • Midilli modu ile Django desteği

Kurulumu gülünç kolay, sadece aşağıdaki satırı ekleyin ~/.spacemacs:

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

tam olarak nerede .spacemacs içinde merak ediyorum bunu eklemek gerekir? en iyisi tamam mı önce (defne dotspacemacs / layers () ...?
user391339

Denilen bir liste var dotspacemacs-configuration-layers. Orada ekle :)
Unfun Cat

4

Kullandığım amaca modu . Bu oldukça sağlam bir ortam tanımlamanıza izin verir.

Kullanarak elpy, pydocve neotreeoldukça sağlam bir ortama sahibim (bir anlamda pencerelerin hatalarda garip şeyler yapmaması anlamında). Bu aynı zamanda gud-pdbhata ayıklama için oldukça iyi çalışabilir .

neotree, python modu, pydoc ve alt python (elpy aracılığıyla) ile python için emacs amaçlı kurulum


4

İşte kapsamlı bir rehber: http://wikemacs.org/wiki/Python Kullanıma hazır çözümler (Prelude başlangıç ​​seti , Spacemacs, veri bilimi için çözümler ,…), büyük kullanışlı paketler (Elpy) çevrenizi geliştirmek için ihtiyacınız olan her pakette olduğu gibi. İşte genel bir bakış .

yeniden düzenleme

Bu en "IDE'ye özgü" özelliktir. Rope python kütüphanesi sayesinde bazı olasılıklar içinde Emacs. MELPA'da kurmanın ve kullanmanın en kolay yolu emacs-traad paketidir. Diğerleri arasında, özellikleri:

  • yöntem imzasını değiştirme: argüman ekleme / kaldırma, çapraz proje yeniden yapılandırmasıyla (elbette),
  • bir şeyi yeniden adlandır
  • tanımları bul,…

Halat, Elpy'ye de dahil edilmiştir.

Basit kod manipülasyonu

Yeniden düzenlemeye veya kod manipülasyonuna yardımcı olacak daha basit araçlara sahibiz: http://wikemacs.org/wiki/Python#Other_Python_.22refactoring.22_tools

Örneğin, Mermi (diğer cevaplar bakın) büyük, biz de bir araca sahip dekoratörler eklemek , / ekleme / düzenleme argümanları kaldırmak bir yöntem, kod üretimi için bir araç öldürmek / kopyala / yorum /, yeniden adlandırma ...

Kod gezinme

Etiketleri ve cscope ile bir IDE olarak gezinebiliriz: bunu çağıran işlevleri bulabilir, olayları bulabilir vb.

Emacs ayrıca imenu (dümen-imenu), dümen basamağı (bir tamponda interaktif tutma ), emacs-helm-ag (bir projede interaktif gümüş arayıcı) vb. Gibi harika paketlere sahiptir .

Koşu testleri

Testleri çalıştırmak için iyi destek sağlayan Elpy'dir (django koşucusu, elpy veya başka bir test ile). Sadece şu anda bulunduğumuz ünite testini bile yapabiliriz: çok kullanışlı! Bu yüzden buna yardımcı olacak bir Hydra var (hatalar arasındaki uçurum, piton istemine geç…).

Destek olun

Bu, Python'a özgü olmayan bir Emacs paketidir. Ancak, projenin herhangi bir yerinden bir make target gerçekleştirebilmeyi ve tamamlanan make komutunu seçmeyi seviyorum . bağlantı

Girinti ile başa çıkmak

Biraz paket var, girinti-araçları , yani komutları bir girintili blokla doğrudan çalışmayı verir: hamleyi girinti sonraki önceki-çocuk-ebeveyn bloğuna, girinti / deindent / yorum / kopyala / akım-blok kat / öldürmek , yaml için ve Python için de mükemmel. Doc ve gif demosu

Django desteği

Django’ya bakın . Elpy django koşucusunu destekliyor. Bkz elpy django doc . django-mode (melpa'da) vurgulu şablonlara, hızlı komutlara, yönetim komutlarına tamamlanma ,…

Ayrıca önemli: harika Git, Github ve Gitlab desteği

magithub github PR'leri yaratabilir, sorunları getirebilir ve referans mesajlarına referanslarını ekleyebiliriz, magit harika,… bkz. http://wikemacs.org/wiki/Git


Özellikle daha büyük ve / veya karmaşık projelerde yeniden yapılanma, bir şeyi kırmamak için çok önemlidir. Birisi Spacemacs ile emacs-traad kurmayı biliyor mu?
thinwybk

1

Buradaki cevaplar, boşluk haritalarının sağladığı önemli özelliklerin çoğunu sağlamıştır, ancak her zaman bulamadığım bir özellik vardı - DEBUGGING (Çok yakın zamana kadar boşluklarla iyi giden herhangi bir hata ayıklama aracı bulamadım)

Peki, boşluklarım için nasıl bir hata ayıklama iş akışı oluşturdum?

Spacemac'lerde IDE benzeri hata ayıklama deneyimi sağlamak için realgud.el paketini kullanan ve geliştirilmekte olan bir özellik dalı var : https://github.com/CeleritasCelery/spacemacs Tek yapmanız gereken, bu dalı .emac'larınıza çekmek. d dizini ve ~ / .emacs.d / layers / + lang / python / package.el dosyasında bazı değişiklikler yapın

Hata ayıklamak için boşluk ayarlamak için ayrıntılı adımlar (derin bir nefes alın)

  1. Aşağıdaki komutları terminalinize birer birer yazın. Bu, CeleritaCelery'nin boşluk değişikliklerini 'debug-layer' adlı ayrı bir dalda ekler. Bu, eğer bir şey dağılırsa ana şubeyi ve işten çıkarmayı her zaman kontrol edebileceğiniz anlamına gelir! orjinal boşluklarınız geri döndü!

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

  1. Şimdi ~ / .emacs.d / layers / + lang / python / Packages.el dosyasını açın ve aşağıdaki işlevi dosyanın sonuna ekleyin. ;; 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"))) Bu işlev, trepan3k hata ayıklayıcısını python hata ayıklayıcı olarak kullanır. Değeri pdb veya ipdb olarak veya istediğiniz hata ayıklayıcısını değiştirebilirsiniz. Trepan3k kullanmayı planlıyorsanız, sudo pip install trepan3kpython dağıtımınızla önceden kurulmamış olarak geldiğinden pip ile kurduğunuzdan emin olun .

  2. Şimdi .spacemacs dosyanızı açın ve dotspacemacs-configuration-layer içindeki 'debug' katmanını açın dotspacemacs-configuration-layers '( (python :variables python-enable-yapf-format-on-save t flycheck-disabled-checkers '(python-flake8) flycheck-checker 'python-pylint ) debug )

  3. Sonra boşlukları yeniden başlatın ve herhangi bir python dosyasını açın Mx realgud: trepan3k yazarak hata ayıklamaya başlayabilirsiniz.

Bu hata ayıklama oturumunu başlatır ve burada açıklanan realgud keybindings kullanarak kesme noktalarını ekleyebilir, silebilirsiniz: https://github.com/realgud/realgud#source-window-commands

Sen bittin!


clyton yukarıdaki cevabı, git repo github.com/CeleritasCelery/debug-layer olmalıdır . Bunun için PR şu anda açıktır github.com/syl20bnr/spacemacs/pull/9246
Oddbodbloke

(İtibar eksikliğinden dolayı yorum yapamam) Yukarıdakiler spacemacların gelişmekte olan dallarıyla birleştirildi, bu yüzden birinci adım göz ardı edilebilir.
Oddbodbloke
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.