คุณสร้าง Python IDE ที่มีประสิทธิภาพด้วย Emacs ได้อย่างไร (ในฐานะที่เป็น Text Editor)


56

Emacs เป็นตัวแก้ไขที่ยอดเยี่ยม - อย่างไรก็ตามมีการกล่าวว่า " ในการเขียนโปรแกรมที่คุณต้องการ IDE แรก " ดังนั้นคุณจะสร้าง IDE ใน Emacs ที่ปรับแต่งได้อย่างกว้างขวางสำหรับ PYTHON ด้วยคุณสมบัติทั้งหมดของ IDE ที่ทันสมัยได้อย่างไร ฉันต้องการที่จะสามารถดีบักรันและคอมไพล์และจัดการโค้ดได้อย่างมีประสิทธิภาพ จนถึงตอนนี้ฉันได้อ่านเรื่องที่ฉันติดตั้งแพคเกจ Elpy แล้ว แต่ไม่แน่ใจในสิ่งที่ต้องรู้และทำเพื่อที่จะทำให้สิ่งนี้เป็นไปได้


4
คุณช่วยอธิบายให้ชัดเจนมากขึ้นได้ไหม? "IDE" ได้กลายเป็นคำศัพท์และคว้ากระเป๋าสำหรับคุณสมบัติทุกประเภท
wasamasa

ผมคิดว่าคุณยังใหม่กับ Emacs และคุณอาจต้องการที่จะดูที่ฉันพวงมาลัยและคู่มือ Helm กระสุน
Tu Do

2
การค้นหา google สำหรับ "emacs python ide"ให้จำนวนครั้งที่เข้าชมพอสมควร คุณช่วยอธิบายสิ่งที่คุณได้ลองไปแล้วและอะไรที่ยังไม่เป็นที่พอใจ?
แดน

1
ฉันลงคะแนนให้ปิดคำถามนี้เป็นหัวข้อนอกเพราะกว้างเกินไป
Drew

4
IDEs อาจมีประโยชน์ แต่ "เมื่อต้องการโปรแกรมที่คุณต้องการ IDE" นั้นเป็นเรื่องที่งี่เง่า มีรหัสที่ดีมากมายที่ถูกเขียนขึ้นก่อนที่จะมี IDEs
offby1

คำตอบ:


57

โหมด Python เริ่มต้นใน Emacs มีคุณสมบัติหลายอย่างรวมถึงการทำให้โค้ดเสร็จสมบูรณ์โดยอิงจาก Python เชลล์ที่ด้อยกว่าเพื่อให้สามารถใช้เป็น IDE พื้นฐานโดยไม่มีแพ็กเกจที่เพิ่มเข้ามา คุณสามารถใช้ฟังก์ชั่น Emac อื่น ๆ ของ Core กับ Python ได้เช่นกัน ตัวอย่างเช่นM-x compile/ M-x recompileสามารถใช้เพื่อเรียกใช้การทดสอบ M-x pdbสามารถเรียกใช้ดีบักเกอร์ Python และรวมเข้ากับสภาพแวดล้อม gud ของ Emacsเพื่อให้คุณได้รับจุดพักแบบอินไลน์

ในการขยายตัวนั้นมีแพ็คเกจหลักสามแพ็คเกจสำหรับ Emac ที่พยายามใช้ Python IDE ที่มีฟีเจอร์มากขึ้น (ตามลำดับตัวอักษร):

พวกเขาทั้งหมดให้คุณสมบัติเดียวกันคร่าว ๆ :

  • การเติมโค้ดให้สมบูรณ์โดยใช้โหมดอัตโนมัติหรือโหมด บริษัท
  • การนำทางรหัสที่ไปที่คำจำกัดความ / ประเพณี
  • ฟังก์ชั่นการแสดงลายเซ็นโดยใช้ ElDoc
  • เอกสารวิปัสสนาบนสัญลักษณ์ที่จุด
  • ตรวจสอบไวยากรณ์โดยใช้ flymake หรือ flycheck
  • และบางคน (อย่างน้อย Elpy) มีการสนับสนุนการรีแฟคเตอร์พื้นฐาน

นอกเหนือจากนี้ Emacs ยังสามารถช่วยให้คุณมีเวิร์กโฟลว์จำนวนมาก แต่ไม่ได้กำหนดเพียงอย่างเดียว ดังนั้นขั้นตอนต่อไปขึ้นอยู่กับวิธีที่คุณใช้งาน Python วิธีที่ดีที่สุดในที่นี้คือการหาเวิร์กโฟลว์ Python ที่ดีและลองหาแพ็คเกจ Emacs ที่ช่วยคุณในขั้นตอนการทำงานของเวิร์กโฟลว์โดยเฉพาะ

ตัวอย่างเช่นมีหลายแพ็คเกจที่จะทำงานกับ virtualenvs (Elpy ที่คุณพูดถึงมาพร้อมกับ pyvenv) ซึ่งคุณควรใช้ Emacs-Jedi มีโหมดการติดตามรหัสซึ่งจะมีประโยชน์ หากคุณใช้ IPython บ่อยๆจะมีIPython Notebookสำหรับ Emacs มีโหมดสนับสนุนพิเศษสำหรับการพัฒนา Django และอื่น ๆ - คุณสามารถไปที่http://melpa.org/และค้นหา Python เพื่อรับแนวคิด

นอกเหนือจาก Python คุณอาจได้รับประโยชน์จากแพ็คเกจ Emacs พิเศษบางอย่างที่ช่วยในการพัฒนาโดยทั่วไป Projectileเป็นแพ็คเกจทั่วไปสำหรับการจัดการโครงการซึ่งให้คุณสมบัติที่น่าสนใจมากมายเช่นการค้นหาในโครงการหรือการย้ายระหว่างการทดสอบและการใช้งาน หากยังไม่ได้รับการติดตั้งเป็นการอ้างอิงจากแพ็คเกจ IDE ที่คุณเลือกคุณยังสามารถใช้YASnippetซึ่งให้ข้อมูลโค้ดอัจฉริยะสำหรับการสร้างรหัส คอลเลกชันตัวอย่างเริ่มต้นมีตัวอย่างขนาดใหญ่สำหรับ Python ด้วย

แต่อีกครั้งแพ็คเกจ IDE หลักด้านบนจะช่วยให้คุณมีสภาพแวดล้อมที่ดี - ขั้นตอนต่อไปขึ้นอยู่กับเวิร์กโฟลว์เฉพาะของคุณเป็นอย่างมาก

(การเปิดเผยอย่างเต็มรูปแบบ: ฉันเป็นผู้เขียน Elpy ดังนั้นโปรดคำนึงถึงเรื่องนี้เมื่ออ่านข้างต้น)


1
ขอบคุณมากสำหรับการตอบสนองที่ครอบคลุมมันได้พิสูจน์แล้วว่ามีประโยชน์อย่างกว้างขวางในรูปแบบที่บทความจำนวนนับไม่ถ้วนมี
Exchangist ประจำ

2
ขอบคุณ @Jorgen ฉันใช้elpyทุกวันและมีคำถามสั้น ๆ เกี่ยวกับคำตอบของคุณเมื่อคุณพูดว่า" M-x pdbสามารถเรียกใช้ดีบักเกอร์ Python"นี่เป็นวิธีการที่แน่นอนหรือไม่ ฉันมีบัฟเฟอร์งูหลามและเมื่อฉันทำM-x pdbฉันได้รับพรอมต์ใน minibuffer "Run pdb (like this): pdb my_file.py"ที่กล่าวว่า เมื่อฉันกดRETฉันจะได้รับ "ImportError: ไม่มีโมดูลชื่อ pdb.pdb: 'pdb ไม่ใช่แพ็คเกจ" นี่คือ PYthon 3.4 ล่าสุดหลังจากเพิ่งอัพเกรด pdb ด้วย pip ซึ่งให้ฉัน:$ pip freeze | grep pdb => pdb==0.1
Amelio Vazquez-Reina

1
Pdb มาพร้อมกับ Python ฉันไม่รู้ว่าทำไมถึงไม่พบฉันกลัว :-(
Jorgen Schäfer

@ JorgenSchäferหากpdbไม่พบ แต่pythonพบในเครื่องคุณสามารถเรียกใช้ pdb โดยใช้M-x pdb"Run pdb (เช่นนี้): python -m pdb my_file.py`
ChrisFreeman

ฉันยังพบว่าแพคเกจสฟิงซ์ - doc มีประโยชน์ในการเขียนเอกสาร
aadcg

17

ผมจะสนับสนุนให้ผู้ชั่วร้ายที่จะลอง emacs spacemacs

มันมีเลเยอร์หลามที่ยอดเยี่ยมดูรายละเอียดที่นี่: https://github.com/syl20bnr/spacemacs/tree/master/layers/!lang/python

ณ ตอนนี้มันรวมถึง:

  • การเติมข้อมูลอัตโนมัติโดยใช้โหมดแอนะคอนดา
  • การนาวิเกตโค้ดโดยใช้โหมดแอนาคอนดา
  • การค้นหาเอกสารโดยใช้โหมดอนาคอนดาและ pylookup
  • ทดสอบการใช้งานโดยใช้ nose.el หรือ pytest
  • สภาพแวดล้อมเสมือนจริงโดยใช้ pyvenv
  • เปิดใช้งานโหมดความหมาย
  • รองรับ Django ผ่านทางโหมด pony

การติดตั้งนั้นง่ายมากเพียงเพิ่มบรรทัดต่อไปนี้ลงใน~/.spacemacs:

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

ฉันอยากจะเพิ่มสิ่งนี้ด้วยความอยากรู้อยากเห็นใน. spacemacs หรือไม่ ตกลงมากที่สุดคืออะไร? ก่อนหน้า (กำหนดจุด dotspacemacs / เลเยอร์ () ... ?
user391339

dotspacemacs-configuration-layersมีรายการที่เรียกว่าเป็น เพิ่มที่นั่น :)
แมว Unfun

4

ผมใช้วัตถุประสงค์โหมด สิ่งนี้ช่วยให้คุณกำหนดสภาพแวดล้อมที่แข็งแกร่ง

ใช้elpy, pydocและneotreeฉันมีสภาพแวดล้อมที่ค่อนข้างแข็งแรง (ในแง่ที่ว่า windows ไม่ได้ทำสิ่งผิดปกติที่ผิดพลาด) นอกจากนี้ยังสามารถทำงานได้ดีgud-pdbสำหรับการดีบัก

การตั้งค่า emacs- วัตถุประสงค์สำหรับงูหลามกับ neotree, โหมดหลาม, pydoc, และหลามด้อย (ผ่าน elpy)


4

นี่คือคำแนะนำที่ครอบคลุม: http://wikemacs.org/wiki/Pythonมันแสดงรายการโซลูชันที่พร้อมใช้งาน ( ชุดเริ่มต้นของ Prelude Spacemacs โซลูชั่นสำหรับวิทยาศาสตร์ข้อมูล , ... ), แพ็คเกจที่มีประโยชน์ขนาดใหญ่ (Elpy) เช่นกัน ทุกแพ็คเกจคุณต้องปรับปรุงสภาพแวดล้อมของคุณ นี่คือภาพรวม

refactoring

นี่เป็นคุณลักษณะ "ที่เฉพาะเจาะจงที่สุดของ IDE" Emacs มีความเป็นไปได้บ้างที่ต้องขอบคุณห้องสมุด Rope python ปรากฎวิธีที่ง่ายที่สุดในการติดตั้งและใช้งานคือแพ็คเกจemacs-traadใน MELPA มันมีคุณสมบัติอื่น ๆ ในกลุ่ม:

  • เปลี่ยนลายเซ็นวิธีการ: เพิ่ม / ลบอาร์กิวเมนต์ด้วยการเปลี่ยนโครงสร้างโครงการข้าม (แน่นอน),
  • เปลี่ยนชื่ออะไรก็ได้
  • ค้นหาคำจำกัดความ ...

Rope ยังรวมอยู่ใน Elpy

การจัดการรหัสที่ง่ายขึ้น

เรามีเครื่องมือที่ง่ายขึ้นเพื่อช่วยในการปรับโครงสร้างใหม่หรือในการจัดการโค้ด: http://wikemacs.org/wiki/Python#Other_Python_.22refactoring.22_tools

ยกตัวอย่างเช่นกระสุนเป็นที่ดี (ดูคำตอบอื่น ๆ ) เรายังมีเครื่องมือในการเพิ่มตกแต่ง , เพิ่ม / ลบ / แก้ไขข้อโต้แย้งเปลี่ยนชื่อ / คัดลอก / ความคิดเห็น / ฆ่าวิธีการเครื่องมือสำหรับการสร้างรหัส ...

การนำรหัส

เราสามารถนำทางในฐานะ IDE ด้วยแท็กและ cscope: ค้นหาฟังก์ชั่นที่เรียกสิ่งนี้, ค้นหาสิ่งที่เกิดขึ้น ฯลฯ

Emacs ยังมีแพ็คเกจที่ยอดเยี่ยมเช่น imenu (helm-imenu), helm-swoop (grep เชิงโต้ตอบในบัฟเฟอร์), emacs-helm-ag (เครื่องมือค้นหาเงินแบบโต้ตอบในโครงการ) ฯลฯ

วิ่งทดสอบ

มันเป็น Elpy ที่ให้การสนับสนุนที่ดีในการทดสอบ (กับนักวิ่ง django, elpy หรืออีกคนหนึ่ง) เราสามารถเรียกใช้การทดสอบหน่วยที่เรามีอยู่ในปัจจุบัน: มีประโยชน์มาก! ดังนั้นมีไฮดราที่จะช่วยได้ (cicle ระหว่างข้อผิดพลาดสลับไปที่พร้อมรับคำหลาม ... )

ให้การสนับสนุน

นี่เป็นแพ็คเกจ Emacs ที่ไม่เฉพาะเจาะจงกับ Python แต่ผมชอบที่จะสามารถทำงานให้เป้าหมายจากที่ใดก็ได้ในโครงการและการเลือกคำสั่งให้กับความสำเร็จ ลิงค์

จัดการกับการเยื้อง

มีแพคเกจเล็ก ๆ น้อย ๆ , เยื้องเครื่องมือที่ช่วยให้คำสั่งในการทำงานโดยตรงกับบล็อกเยื้อง: ย้ายไปบล็อกถัดไปก่อนหน้านี้เด็กผู้ปกครองเยื้องเยื้อง / deindent / ความคิดเห็น / คัดลอก / ฆ่า / พับบล็อกปัจจุบัน , เป็นต้นเหมาะสำหรับ yaml และสำหรับ Python การสาธิต Doc และ gif

การสนับสนุน Django

ดูDjango Elpyสนับสนุนนักวิ่ง django ดูdoc Django elpy django-mode (ใน melpa) มีการเน้นแม่แบบคำสั่งด่วนการจัดการคำสั่งเสร็จสมบูรณ์ ...

สิ่งที่สำคัญ: การสนับสนุน Git ที่ยอดเยี่ยม Github และ Gitlab

magithubสามารถสร้าง PRs GitHub เราสามารถดึงปัญหาและแทรกการอ้างอิงของพวกเขาในข้อความคอมมิท , magitนั้นยอดเยี่ยมมาก…ดูhttp://wikemacs.org/wiki/Git


โดยเฉพาะอย่างยิ่งในโครงการที่มีขนาดใหญ่และ / หรือการกระจายการปรับโครงสร้างเป็นสิ่งสำคัญอย่างยิ่งที่จะไม่ทำลายบางสิ่ง มีคนรู้วิธีตั้งค่า emacs-traad ด้วย Spacemacs หรือไม่?
thinwybk

1

คำตอบที่นี่ได้ให้คุณสมบัติที่สำคัญส่วนใหญ่ที่ spacemacs ให้ แต่มีคุณสมบัติหนึ่งที่ฉันไม่สามารถหาได้ - การดีบัก (ฉันไม่พบเครื่องมือการดีบักที่เหมาะสมที่เข้ากันได้กับ spacemacs จนกระทั่งเมื่อเร็ว ๆ นี้)

ดังนั้นฉันจะตั้งค่าเวิร์กโฟลว์การดีบักสำหรับสเปซแม็กได้อย่างไร

มีฟีเจอร์แบรนช์ภายใต้การพัฒนาที่ใช้แพ็คเกจ realgud.el เพื่อให้ใกล้เคียงกับ IDE เช่นประสบการณ์การดีบักใน spacemacs: https://github.com/CeleritasCelery/spacemacs สิ่งที่คุณต้องทำคือดึงสาขานี้เป็น. emacs ของคุณ d ไดเรกทอรีและทำการเปลี่ยนแปลงบางอย่างในไฟล์ ~ / .emacs.d / layers / + lang / python / packages.el ของคุณ

ขั้นตอนโดยละเอียดในการตั้งค่า spacemacs สำหรับการดีบั๊ก (หายใจลึก ๆ )

  1. พิมพ์คำสั่งด้านล่างในเทอร์มินัลของคุณทีละคน สิ่งนี้จะเพิ่มการเปลี่ยนแปลง spacemacs ของ CeleritaCelery ในสาขาแยกต่างหากที่ชื่อว่า 'debug-layer' ซึ่งหมายความว่าหากมีสิ่งใดเกิดขึ้นคุณสามารถชำระเงินที่สาขาหลักและ voila ได้ตลอดเวลา! 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 ตรวจสอบให้แน่ใจว่าคุณติดตั้งด้วย pip sudo pip install trepan3kเนื่องจากไม่ได้ติดตั้งไว้ล่วงหน้าด้วยการแจกจ่าย python ของคุณ

  2. ตอนนี้เปิดไฟล์. spacemacs ของคุณและเลเยอร์ 'debug' ภายใน dotspacemacs-configuration-layer เช่นนี้ 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

นี่จะเริ่มต้นเซสชันการดีบักและคุณสามารถเพิ่มลบจุดพักโดยใช้การโยงคีย์ที่อธิบายได้ที่นี่: https://github.com/realgud/realgud#source-window- คำสั่ง

คุณทำเสร็จแล้ว!


คำตอบ clyton เหนือ, repo คอมไพล์ควรจะgithub.com/CeleritasCelery/debug-layer การประชาสัมพันธ์เรื่องนี้เปิดให้บริการที่github.com/syl20bnr/spacemacs/pull/9246
Oddbodbloke

(ฉันไม่สามารถแสดงความคิดเห็นเนื่องจากขาดชื่อเสียง) ดังกล่าวได้ถูกรวมเข้ากับสาขาการพัฒนาของ spacemacs ดังนั้นขั้นตอนที่หนึ่งสามารถถูกละเว้น
Oddbodbloke
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.