Bagaimana Anda membuat IDE Python yang kuat dengan Emacs (sebagai editor Teks)

56

Emacs adalah editor yang sangat baik - namun dikatakan " untuk memprogram Anda pertama-tama membutuhkan IDE " - jadi bagaimana Anda membangun IDE dalam Emacs untuk PYTHON yang dapat disesuaikan secara luas dengan semua fitur IDE modern. Saya ingin dapat secara efektif men-debug, menjalankan dan mengkompilasi, dan mengelola kode. Sejauh ini saya telah membaca tentang subjek saya telah menginstal paket Elpy tetapi tidak yakin apa lagi yang perlu diketahui dan dilakukan untuk dapat membuat ini mungkin.

Penukar Serial
sumber
4
Bisakah Anda lebih spesifik? "IDE" telah menjadi kata kunci dan ambil tas untuk semua jenis fitur.
wasamasa
Saya kira Anda baru di Emacs dan Anda mungkin ingin melihat panduan Helm dan Helm Proyektil saya .
Tu Do
2
Sebuah pencarian google untuk "emacs python ide" memberikan cukup banyak hits. Bisakah Anda mengklarifikasi apa yang sudah Anda coba dan apa yang belum memuaskan?
Dan
1
Saya memberikan suara untuk menutup pertanyaan ini sebagai di luar topik karena terlalu luas.
Drew
4
IDE mungkin berguna, tetapi "untuk memprogram Anda pertama-tama membutuhkan IDE" adalah konyol. Banyak kode bagus ditulis sebelum ada IDE.
offby1

Jawaban:

57

Mode Python default di Emacs memiliki sejumlah fitur, termasuk penyelesaian kode berdasarkan shell Python inferior, sehingga dapat digunakan sebagai IDE dasar tanpa paket tambahan. Anda dapat menggunakan fungsi inti Emacs lainnya dengan Python juga. Sebagai contoh, M-x compile/ M-x recompiledapat digunakan untuk menjalankan tes. M-x pdbdapat menjalankan debugger Python, dan itu terintegrasi dengan lingkungan gud Emacs sehingga Anda benar-benar mendapatkan breakpoint sebaris.

Untuk memperluasnya, ada tiga paket utama untuk Emacs yang mencoba mengimplementasikan IDE Python yang lebih berfitur (dalam urutan abjad):

Mereka semua menyediakan fitur yang kira-kira sama:

  • Penyelesaian kode menggunakan mode lengkapi-otomatis atau mode perusahaan
  • Navigasi kode, yaitu menuju definisi / penggunaan
  • Tampilan fungsi tanda tangan menggunakan ElDoc
  • Dokumentasi introspeksi pada simbol di titik
  • Sintaks memeriksa menggunakan flymake atau flycheck
  • Dan beberapa dari mereka (setidaknya Elpy) memiliki dukungan refactoring dasar

Di luar ini, Emacs juga dapat membantu Anda dengan banyak alur kerja, tetapi itu tidak menentukan satu pun. Jadi langkah selanjutnya sangat tergantung pada bagaimana Anda menggunakan Python. Pendekatan terbaik di sini adalah untuk mengetahui alur kerja Python yang baik dan kemudian mencoba untuk menemukan paket Emacs yang membantu Anda secara khusus dengan langkah-langkah pada alur kerja Anda.

Sebagai contoh, ada beberapa paket untuk bekerja dengan virtualenvs (Elpy, yang Anda sebutkan, dilengkapi dengan pyvenv) yang sebaiknya Anda gunakan. Emacs-Jedi memiliki mode pendamping untuk penelusuran kode yang dapat bermanfaat. Jika Anda banyak menggunakan IPython, ada Notebook IPython untuk Emacs. Ada mode dukungan khusus untuk pengembangan Django dll. - Anda dapat mengunjungi http://melpa.org/ dan mencari Python untuk mendapatkan beberapa ide.

Di luar Python, Anda mungkin mendapat manfaat dari beberapa paket Emacs tambahan yang membantu pengembangan secara umum. Proyektil adalah paket generik untuk manajemen proyek yang memberi Anda sejumlah fitur menarik, seperti mencari dalam suatu proyek atau bergerak di antara pengujian dan implementasi. Jika belum diinstal sebagai dependensi dari paket IDE pilihan Anda, Anda juga dapat menggunakan YASnippet yang menyediakan cuplikan cerdas untuk pembuatan kode. Koleksi snippet default juga memiliki sejumlah besar snippet untuk Python.

Tetapi sekali lagi, paket IDE utama di atas akan membuat Anda mendapatkan lingkungan yang waras - langkah selanjutnya sangat tergantung pada alur kerja spesifik Anda.

(Pengungkapan penuh: Saya adalah penulis Elpy, jadi pertimbangkan itu saat membaca di atas.)

Jorgen Schäfer
sumber
1
Terima kasih banyak atas tanggapan komprehensif seperti itu, telah terbukti sangat berguna dalam cara yang tidak terhitung artikel.
Serial Exchangist
2
Terima kasih @Jorgen. Saya menggunakan elpysetiap hari dan memiliki pertanyaan cepat tentang jawaban Anda, ketika Anda mengatakan bahwa " M-x pdbdapat menjalankan debugger Python" , bagaimana ini sebenarnya? Saya memiliki buffer Python, dan ketika saya melakukannya M-x pdbsaya mendapatkan prompt di minibuffer yang mengatakan "Run pdb (like this): pdb my_file.py". Ketika saya menekan RETsaya mendapatkan "ImportError: Tidak ada modul bernama pdb.pdb: 'pdb bukan paket" Ini adalah dengan PYthon 3.4 terbaru setelah hanya meningkatkan pdb dengan pip, yang memberi saya:$ pip freeze | grep pdb => pdb==0.1
Amelio Vazquez-Reina
1
Pdb hadir dengan Python. Saya tidak tahu mengapa itu tidak ditemukan, saya takut. :-(
Jorgen Schäfer
@ JorgenSchäfer jika pdbtidak ditemukan, tetapi pythonditemukan secara lokal, maka Anda dapat menjalankan pdb menggunakan M-x pdblalu "Jalankan pdb (seperti ini): python -m pdb my_file.py`
ChrisFreeman
Saya juga menemukan paket sphinx-doc berguna untuk menulis dokumen.
aadcg
17

Saya akan mendorong pengguna emacs jahat untuk mencoba spacemacs .

Ini memiliki lapisan python yang brilian, lihat detailnya di sini: https://github.com/syl20bnr/spacemacs/tree/master/layers/!lang/python

Sampai sekarang, itu termasuk:

  • Pelengkapan otomatis menggunakan anaconda-mode
  • Navigasi Kode menggunakan anaconda-mode
  • Pencarian Dokumentasi menggunakan anaconda-mode dan pylookup
  • Tes Runner menggunakan nose.el atau pytest
  • Lingkungan Virtual menggunakan pyvenv
  • Mode semantik diaktifkan
  • Dukungan Django melalui mode-kuda

Instalasi sangat mudah, cukup tambahkan baris berikut ke Anda ~/.spacemacs:

(setq-default dotspacemacs-configuration-layers '(python))
Kucing Unfun
sumber
karena penasaran di mana tepatnya di .spacemacs harus saya tambahkan ini? adalah ok paling atas? sebelum (defun dotspacemacs / layers () ...?
user391339
Ada daftar yang disebut dotspacemacs-configuration-layers. Tambahkan di sana :)
The Unfun Cat
4

Saya menggunakan mode tujuan . Ini memungkinkan Anda untuk mendefinisikan lingkungan yang cukup kuat.

Menggunakan elpy,, pydocdan neotreesaya memiliki lingkungan yang cukup kuat (dalam arti windows tidak melakukan hal-hal aneh pada kesalahan). Ini juga dapat bekerja dengan cukup baik gud-pdbuntuk debugging.

setup emacs-purpose untuk python dengan neotree, python-mode, pydoc, dan python inferior (melalui elpy)

Nidish Narayanaa
sumber
4

Berikut ini adalah panduan komprehensif: http://wikemacs.org/wiki/Python Ini mencantumkan solusi siap pakai ( kit pembuka Pendahuluan, Spacemacs, solusi untuk ilmu data , ...), paket bermanfaat besar (Elpy), juga karena setiap paket Anda perlu memperbaiki lingkungan Anda. Inilah ikhtisar .

Refactoring

Ini adalah fitur "IDE-spesifik" yang paling. Emacs karena beberapa kemungkinan berkat berkat pustaka Rope python. Ternyata cara termudah untuk menginstal dan menggunakan adalah paket emacs-traad , di MELPA. Ini fitur, antara lain:

  • ubah tanda tangan metode: tambahkan / hapus argumen, dengan refactoring lintas proyek (tentu saja),
  • ganti nama apa saja,
  • temukan definisi, ...

Tali juga termasuk dalam Elpy.

Manipulasi kode yang lebih sederhana

Kami memiliki alat yang lebih sederhana untuk membantu refactoring atau dalam manipulasi kode: http://wikemacs.org/wiki/Python#Other_Python_.22refactoring.22_tools

Misalnya, Proyektil hebat (lihat jawaban lain), kami juga memiliki alat untuk menambah dekorator , menambah / menghapus / mengedit argumen , mengganti nama / menyalin / mengomentari / membunuh metode, alat untuk pembuatan kode, ...

Navigasi kode

Kita dapat menavigasi sebagai IDE dengan tag dan cscope: temukan fungsi yang memanggil ini, temukan kejadian, dll.

Emacs juga memiliki paket hebat seperti imenu (helm-imenu), helm-swoop (grep interaktif dalam buffer), emacs-helm-ag (pencari perak interaktif dalam suatu proyek), dll.

Menjalankan tes

Elpy yang memberikan dukungan yang baik untuk menjalankan tes (dengan pelari Django, elpy atau yang lainnya). Kami bahkan dapat menjalankan hanya unit test yang saat ini kami jalankan: sangat berguna! Jadi ada Hydra untuk membantu dengan itu (siklus antara kesalahan, beralih ke prompt python ...).

Buat dukungan

Ini adalah paket Emacs yang tidak khusus untuk Python. Tapi saya suka bisa menjalankan target make dari mana saja di proyek ini dan untuk memilih perintah make dengan selesai . tautan

Berurusan dengan indentasi

Ada paket kecil, indent-tools , yang memberikan perintah untuk bekerja secara langsung dengan blok indentasi: pindah ke blok indentasi child-parent-next, indent / deindent / comment / copy / kill / fold the current-block , dll. Sempurna untuk yaml, dan juga untuk Python. Dok dan gif demo

Dukungan Django

lihat Django . Elpy mendukung pelari Django. Lihat elpy django doc . django-mode (dalam melpa) memiliki template penyorotan, perintah cepat, penyelesaian perintah manajemen , ...

Juga penting: dukungan besar Git, Github dan Gitlab

magithub dapat membuat PR github, kita dapat mengambil masalah dan memasukkan referensi mereka dalam pesan komit, magit hebat, ... lihat http://wikemacs.org/wiki/Git

Ehvince
sumber
Terutama dalam proyek yang lebih besar dan / atau proyek-proyek yang berantakan refactoring adalah sangat penting untuk tidak merusak sesuatu. Apakah ada yang tahu cara mengatur emacs-traad dengan Spacemacs?
thinwybk
1

Jawaban di sini telah menyediakan sebagian besar fitur penting yang disediakan spacemacs tetapi selalu ada satu fitur yang tidak dapat saya temukan - DEBUGGING (Saya tidak menemukan alat debugging yang layak yang berjalan dengan baik dengan spacemacs sampai baru-baru ini)

Jadi, bagaimana cara saya mengatur alur kerja debug untuk spacemacs saya?

Ada cabang fitur dalam pengembangan yang menggunakan paket realgud.el untuk menyediakan yang dekat dengan IDE seperti pengalaman debug di ruangwaktu: https://github.com/CeleritasCelery/spacemacs Yang harus Anda lakukan adalah menarik cabang ini ke .emacs Anda. d direktori dan buat beberapa perubahan pada file ~ / .emacs.d / layers / + lang / python / packages.el Anda

Langkah-langkah terperinci untuk mengatur spasi untuk debug (Ambil napas dalam-dalam)

  1. Ketikkan perintah di bawah ini di terminal Anda satu per satu. Ini akan menambahkan perubahan spacemacs CeleritaCelery di cabang terpisah bernama 'debug-layer'. Ini berarti bahwa jika ada yang kacau Anda selalu dapat checkout cabang master dan voila! spacemac asli Anda kembali!

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

  1. Sekarang buka ~ / .emacs.d / layers / + lang / python / packages.el dan tambahkan fungsi di bawah ini ke akhir file. ;; 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"))) Fungsi ini menggunakan debugger trepan3k sebagai debugger python. Anda bisa mengubah nilainya menjadi pdb atau ipdb atau debugger mana pun yang Anda suka. Jika Anda berencana untuk menggunakan trepan3k pastikan Anda menginstalnya dengan pip sudo pip install trepan3kkarena tidak datang pra-instal dengan distribusi python Anda.

  2. Sekarang buka file .spacemacs Anda dan lapisan 'debug' di dalam dotspacemacs-configuration-layers seperti ini dotspacemacs-configuration-layers '( (python :variables python-enable-yapf-format-on-save t flycheck-disabled-checkers '(python-flake8) flycheck-checker 'python-pylint ) debug )

  3. Kemudian restart spacemacs dan buka file python. Anda dapat mulai men-debug dengan mengetikkan Mx realgud: trepan3k

Ini akan memulai sesi debug dan Anda dapat menambahkan, menghapus breakpoint menggunakan realgud keybindings yang dijelaskan di sini: https://github.com/realgud/realgud#source-window-commands

Kamu sudah selesai!

clyton dantis
sumber
Jawaban clyton di atas, repo git harus github.com/CeleritasCelery/debug-layer . PR untuk ini saat ini terbuka di github.com/syl20bnr/spacemacs/pull/9246
Oddbodbloke
(Saya tidak bisa berkomentar karena kurangnya reputasi) Hal di atas telah digabungkan ke dalam pengembangan cabang ruang angkasa, sehingga langkah pertama dapat diabaikan.
Oddbodbloke