Làm thế nào để bạn tạo một IDE Python mạnh mẽ với Emacs (dưới dạng trình soạn thảo Văn bản)


56

Emacs là một trình soạn thảo xuất sắc - tuy nhiên người ta nói " để lập trình trước tiên bạn cần có IDE " - vậy bạn sẽ xây dựng một IDE trong Emacs tùy biến rộng rãi cho PYTHON như thế nào với tất cả các tính năng của IDE hiện đại. Tôi muốn có thể gỡ lỗi, chạy và biên dịch và quản lý mã một cách hiệu quả. Cho đến nay tôi đã đọc về chủ đề tôi đã cài đặt gói Elpy nhưng không chắc chắn về những gì khác cần biết và làm để làm điều này có thể.


4
Bạn có thể vui lòng cụ thể hơn? "IDE" đã trở thành một từ thông dụng và túi lấy tất cả các loại tính năng.
wasamasa

Tôi đoán bạn chưa quen với Emacs và bạn có thể muốn xem hướng dẫn Helm and Helm Projectile của tôi .
Từ Đô

2
Một tìm kiếm google cho "emacs python ide" cho số lượt truy cập khá. Bạn có thể làm rõ những gì bạn đã thử và những gì chưa thỏa đáng?
Dan

1
Tôi đang bỏ phiếu để đóng câu hỏi này ngoài chủ đề vì nó quá rộng.
Drew

4
IDE có thể hữu ích, nhưng "để lập trình trước tiên bạn cần IDE" thì thật là ngớ ngẩn. Rất nhiều mã tốt đã được viết trước khi có IDE.
off1

Câu trả lời:


57

Chế độ Python mặc định trong Emacs có một số tính năng, bao gồm hoàn thành mã dựa trên trình vỏ Python kém hơn, do đó có thể được sử dụng làm IDE cơ bản mà không cần thêm gói nào. Bạn cũng có thể sử dụng các hàm Emacs lõi khác với Python. Ví dụ: M-x compile/ M-x recompilecó thể được sử dụng để chạy thử nghiệm. M-x pdbcó thể chạy trình gỡ lỗi Python và nó tích hợp với môi trường gud của Emacs để bạn thực sự có được các điểm dừng nội tuyến.

Để mở rộng về điều đó, có ba gói chính cho Emacs cố gắng triển khai IDE IDE có tính năng hơn (theo thứ tự bảng chữ cái):

Tất cả đều cung cấp các tính năng gần giống nhau:

  • Hoàn thành mã bằng chế độ tự động hoàn thành hoặc chế độ công ty
  • Điều hướng mã, đó là đi đến định nghĩa / tập quán
  • Hiển thị chữ ký chức năng bằng ElDoc
  • Tài liệu hướng nội về biểu tượng tại điểm
  • Kiểm tra cú pháp bằng flymake hoặc flycheck
  • Và một số trong số họ (ít nhất là Elpy) có hỗ trợ tái cấu trúc cơ bản

Ngoài ra, Emacs cũng có thể giúp bạn rất nhiều quy trình công việc, nhưng nó không quy định bất kỳ một quy trình nào. Vì vậy, các bước tiếp theo phụ thuộc rất nhiều vào cách bạn đang sử dụng Python. Cách tiếp cận tốt nhất ở đây sẽ là tìm ra một quy trình công việc Python tốt và sau đó cố gắng tìm các gói Emacs giúp bạn cụ thể với các bước trên quy trình công việc của bạn.

Ví dụ, có nhiều gói để làm việc với virtualenvs (Elpy, mà bạn đề cập, đi kèm với pyvenv) mà bạn có thể nên sử dụng. Emacs-Jedi có chế độ đi kèm để duyệt mã có thể hữu ích. Nếu bạn đang sử dụng IPython rất nhiều, sẽ có IPython Notebook cho Emacs. Có các chế độ hỗ trợ đặc biệt để phát triển Django, v.v. - bạn có thể truy cập http://melpa.org/ và tìm kiếm Python để có một số ý tưởng.

Ngoài Python, bạn có thể được hưởng lợi từ một số gói Emacs bổ sung giúp phát triển nói chung. Projectile là một gói chung để quản lý dự án cung cấp cho bạn một số tính năng thú vị, như tìm kiếm trong một dự án hoặc di chuyển giữa các thử nghiệm và triển khai. Nếu nó chưa được cài đặt như một phần phụ thuộc từ gói IDE bạn chọn, bạn cũng có thể sử dụng YASnippet cung cấp đoạn mã thông minh để tạo mã. Bộ sưu tập đoạn mã mặc định cũng có một số lượng lớn đoạn mã cho Python.

Nhưng một lần nữa, các gói IDE chính ở trên sẽ giúp bạn có một môi trường lành mạnh - các bước tiếp theo phụ thuộc rất nhiều vào quy trình công việc cụ thể của bạn.

(Tiết lộ đầy đủ: Tôi là tác giả của Elpy, vì vậy hãy tính đến điều đó khi đọc phần trên.)


1
Cảm ơn bạn rất nhiều vì một phản hồi toàn diện như vậy, nó đã được chứng minh rất hữu ích theo cách mà vô số bài báo không có.
Trao đổi nối tiếp

2
Cảm ơn @Jorgen. Tôi sử dụng elpyhàng ngày và có một câu hỏi nhanh về câu trả lời của bạn, khi bạn nói rằng " M-x pdbcó thể chạy trình gỡ lỗi Python" , làm thế nào chính xác? Tôi có một bộ đệm Python và khi tôi làm, M-x pdbtôi nhận được một dấu nhắc trong bộ thu nhỏ nói "Run pdb (like this): pdb my_file.py". Khi tôi nhấn, RETtôi nhận được "ImportError: Không có mô-đun có tên pdb.pdb: 'pdb không phải là một gói" Đây là với PYthon 3.4 mới nhất sau khi chỉ nâng cấp pdb với pip, cho tôi:$ pip freeze | grep pdb => pdb==0.1
Amelio Vazquez-Reina

1
Pdb đi kèm với Python. Tôi không biết tại sao nó sẽ không được tìm thấy, tôi sợ. :-(
Jorgen Schäfer

@ JorgenSchäfer nếu pdbkhông được tìm thấy, nhưng pythonđược tìm thấy cục bộ, thì bạn có thể chạy pdb bằng cách sử dụng M-x pdb"Chạy pdb (như thế này): python -m pdb my_file.py`
ChrisFreeman

Tôi cũng thấy gói sphinx-doc hữu ích để viết docstrings.
aadcg

17

Tôi sẽ khuyến khích người dùng evil-emacs thử dùng spacemacs .

Nó có một lớp trăn rực rỡ, xem chi tiết tại đây: https://github.com/syl20bnr/spacemacs/tree/master/layers/!lang/python

Đến bây giờ, nó bao gồm:

  • Tự động hoàn thành bằng chế độ anaconda
  • Điều hướng mã bằng chế độ anaconda
  • Tra cứu tài liệu bằng chế độ anaconda và pylookup
  • Người chạy thử bằng mũi.el hoặc pytest
  • Môi trường ảo sử dụng pyvenv
  • Chế độ ngữ nghĩa được bật
  • Hỗ trợ Django qua chế độ ngựa

Cài đặt rất dễ dàng, chỉ cần thêm dòng sau vào ~/.spacemacs:

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

Vì tò mò, nơi chính xác trong .spacemacs tôi nên thêm cái này? Là đầu rất ok? trước (defun dotspacemacs / layer () ...?
user391339

Có một danh sách gọi là dotspacemacs-configuration-layers. Thêm vào đó :)
Mèo Unun

4

Tôi sử dụng chế độ mục đích . Điều này cho phép bạn xác định một môi trường khá mạnh mẽ.

Sử dụng elpy, pydocneotreetôi có một môi trường khá mạnh mẽ (theo nghĩa là các cửa sổ không làm những điều lạ khi có lỗi). Điều này cũng có thể làm việc khá tốt với gud-pdbgỡ lỗi.

thiết lập mục đích emacs cho python với neotree, python-mode, pydoc và python kém hơn (thông qua elpy)


4

Dưới đây là hướng dẫn toàn diện: http://wikemacs.org/wiki/Python Nó cũng liệt kê các giải pháp sẵn sàng sử dụng (bộ khởi động Prelude , Spacemacs, giải pháp cho khoa học dữ liệu , đánh dấu), các gói hữu ích lớn (Elpy), cũng như mọi gói bạn cần để cải thiện môi trường của bạn. Đây là một cái nhìn tổng quan .

Tái cấu trúc

Đây là tính năng "đặc thù IDE" nhất. Emacs như một số khả năng tại nó nhờ vào thư viện python Rope. Hóa ra cách dễ nhất để cài đặt và sử dụng là gói emacs-traad , trong MELPA. Nó có tính năng, trong số những người khác:

  • thay đổi chữ ký phương thức: thêm / xóa đối số, với tái cấu trúc dự án chéo (tất nhiên),
  • đổi tên bất cứ thứ gì
  • tìm định nghĩa, lòng

Dây cũng được bao gồm trong Elpy.

Thao tác mã đơn giản hơn

Chúng tôi có các công cụ đơn giản hơn để giúp tái cấu trúc hoặc trong thao tác mã: http://wikemacs.org/wiki/Python#Other_Python_.22refactoring.22_tools

Ví dụ, Projectile rất tuyệt (xem các câu trả lời khác), chúng tôi cũng có một công cụ để thêm trang trí , thêm / xóa / chỉnh sửa đối số , đổi tên / sao chép / nhận xét / giết một phương thức, một công cụ để tạo mã,

Điều hướng mã

Chúng ta có thể điều hướng như một IDE với các thẻ và cscope: tìm các hàm gọi hàm này, tìm các lần xuất hiện, v.v.

Emacs cũng có các gói tuyệt vời như imothy (helm-imothy), helm-swoop (grep tương tác trong bộ đệm), emacs-helm-ag (công cụ tìm kiếm bạc tương tác trong một dự án), v.v.

Chạy thử nghiệm

Đó là Elpy cung cấp hỗ trợ tốt để chạy thử nghiệm (với người chạy django, elpy hoặc người khác). Chúng tôi thậm chí chỉ có thể chạy thử nghiệm đơn vị chúng tôi hiện đang làm: rất tiện dụng! Vì vậy, có một Hydra để giúp với điều đó (cicle giữa các lỗi, chuyển sang dấu nhắc python).

Giúp đỡ

Đây là gói Emacs không dành riêng cho Python. Nhưng tôi thích có thể chạy một mục tiêu make từ bất cứ đâu trong dự án và chọn lệnh make hoàn thành . liên kết

Xử lý vết lõm

Có một gói nhỏ, các công cụ thụt lề , cung cấp các lệnh để làm việc trực tiếp với một khối thụt lề: di chuyển đến khối thụt dòng-cha-con-cha-con tiếp theo, thụt lề / nhận xét / sao chép / giết / gập khối hiện tại , vv Hoàn hảo cho yaml, và cũng cho Python. Tài liệu giới thiệu tài liệu và gif

Hỗ trợ Django

xem Django . Elpy hỗ trợ người chạy django. Xem tài liệu django elpy . Chế độ django (trong melpa) có các mẫu tô sáng, các lệnh nhanh, hoàn thành các lệnh quản lý ,

Cũng quan trọng: hỗ trợ Git, Github và Gitlab tuyệt vời

magithub có thể tạo PR github, chúng tôi có thể tìm nạp các vấn đề và chèn tham chiếu của chúng vào các thông điệp cam kết, magit rất tuyệt, Nhìn thấy http://wikemacs.org/wiki/Git


Đặc biệt trong các dự án tái cấu trúc lớn hơn và / hoặc lộn xộn là cực kỳ quan trọng để không phá vỡ một cái gì đó. Có ai biết cách thiết lập emacs-traad với Spacemacs không?
thinwybk

1

Các câu trả lời ở đây đã cung cấp hầu hết các tính năng quan trọng mà spacemacs cung cấp nhưng luôn có một tính năng mà tôi không thể tìm thấy - DEBUGGING (Tôi không tìm thấy bất kỳ công cụ sửa lỗi nào phù hợp với spacemac cho đến gần đây)

Vì vậy, làm thế nào tôi thiết lập một quy trình gỡ lỗi cho các spacemac của tôi?

Có một nhánh tính năng đang được phát triển sử dụng gói realgud.el để cung cấp trải nghiệm gần giống với IDE như trải nghiệm gỡ lỗi trong spacemacs: https://github.com/CeleritasCelery/spacemacs Tất cả những gì bạn phải làm là kéo nhánh này vào .emacs của bạn. thư mục d và thực hiện một số thay đổi trong tệp ~ / .emacs.d / layer / + lang / python / tests.el

Các bước chi tiết để thiết lập spacemacs để gỡ lỗi (Hít thật sâu)

  1. Nhập các lệnh dưới đây trong thiết bị đầu cuối của bạn từng cái một. Điều này sẽ thêm các thay đổi spacemacs của CeleritaCelery trong một nhánh riêng có tên là 'lớp gỡ lỗi'. Điều này có nghĩa là nếu bất cứ điều gì bị rối tung, bạn luôn có thể kiểm tra chi nhánh chính và thì đấy! spacemacs ban đầu của bạn đã trở lại!

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

  1. Bây giờ hãy mở ~ / .emacs.d / layer / + lang / python / ;; 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"))) tests.el và thêm chức năng dưới đây vào cuối tệp Hàm này sử dụng trình gỡ lỗi trepan3k làm trình gỡ lỗi python. Bạn có thể thay đổi giá trị thành pdb hoặc ipdb hoặc bất kỳ trình gỡ lỗi nào bạn thích. Nếu bạn có kế hoạch sử dụng trepan3k, hãy đảm bảo bạn cài đặt nó với pip sudo pip install trepan3kvì nó không được cài đặt sẵn với bản phân phối python của bạn.

  2. Bây giờ hãy mở tệp .spacemacs của bạn và lớp 'gỡ lỗi' bên trong các lớp cấu hình dotspacemacs như thế này dotspacemacs-configuration-layers '( (python :variables python-enable-yapf-format-on-save t flycheck-disabled-checkers '(python-flake8) flycheck-checker 'python-pylint ) debug )

  3. Sau đó khởi động lại spacemacs và mở bất kỳ tệp python nào Bạn có thể bắt đầu gỡ lỗi bằng cách nhập Mx realgud: trepan3k

Điều này sẽ bắt đầu phiên gỡ lỗi và bạn có thể thêm, xóa các điểm dừng bằng cách sử dụng các phím bấm realgud được giải thích tại đây: https://github.com/realgud/realgud#source-window-commands

Bạn đã hoàn tất!


Câu trả lời của clyton ở trên, repo git nên là github.com/CeleritasCelery/debug-layer . PR cho điều này hiện đang mở tại github.com/syl20bnr/spacemacs/pull/9246
Oddbodbloke

(Tôi không thể nhận xét do thiếu danh tiếng) Phần trên đã được sáp nhập vào nhánh phát triển của tàu vũ trụ, vì vậy bước một có thể bỏ qua.
Oddbodbloke
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.