आप Emacs के साथ एक मजबूत पायथन आईडीई कैसे बनाते हैं (पाठ संपादक के रूप में)


56

Emacs एक उत्कृष्ट संपादक है - हालाँकि यह कहा जाता है कि " प्रोग्राम के लिए आपको पहले एक IDE की आवश्यकता है " - तो आप आधुनिक IDE की सभी विशेषताओं के साथ PYTHON के लिए बड़े पैमाने पर अनुकूलन योग्य Emacs में एक IDE कैसे बनाएंगे। मैं प्रभावी रूप से डिबग, रन और संकलन और कोड को प्रबंधित करने में सक्षम होना चाहता हूं। इस प्रकार अब तक मैंने उस विषय पर पढ़ा है जिसे मैंने एल्पी पैकेज में स्थापित किया है, लेकिन इस बात की अनिश्चितता है कि इसे जानने के लिए और क्या करने की आवश्यकता है।


4
क्या आप कृपया अधिक विशिष्ट हो सकते हैं? "IDE" सभी प्रकार की सुविधाओं के लिए एक buzzword और Grab bag बन गया है।
वामासा

मुझे लगता है कि आप Emacs में नए हैं और आप मेरे Helm और Helm प्रोजेक्टाइल गाइड को देखना चाहते हैं
Tu Do

2
"Emacs python ide" के लिए एक Google खोज एक उचित संख्या में हिट देता है। क्या आप स्पष्ट कर सकते हैं कि आपने पहले से क्या प्रयास किया है और क्या अभी तक संतोषजनक नहीं है?
दान

1
मैं इस विषय को ऑफ-टॉपिक के रूप में बंद करने के लिए मतदान कर रहा हूं क्योंकि यह बहुत व्यापक है।
ड्रू

4
आईडीई उपयोगी हो सकता है, लेकिन "प्रोग्राम के लिए आपको पहले एक आईडीई की आवश्यकता है" बस मूर्खतापूर्ण है। आईडीई होने से पहले बहुत सारे अच्छे कोड लिखे गए।
ऑफबी 1

जवाबों:


57

Emacs में डिफ़ॉल्ट पायथन मोड में कई विशेषताएं हैं, जिनमें अवर पायथन शेल के आधार पर कोड पूरा करना शामिल है, ताकि किसी भी अतिरिक्त पैकेज के बिना एक मूल आईडीई के रूप में उपयोग किया जा सके। आप पायथन के साथ अन्य कोर एमएसीएस कार्यों का भी उपयोग कर सकते हैं। उदाहरण के लिए, M-x compile/ M-x recompileपरीक्षण चलाने के लिए इस्तेमाल किया जा सकता है। M-x pdbपायथन डिबगर चला सकते हैं, और यह Emacs 'gud पर्यावरण के साथ एकीकृत करता है ताकि आप वास्तव में इनलाइन ब्रेकपॉइंट प्राप्त कर सकें।

उस पर विस्तार करने के लिए, Emacs के लिए तीन प्रमुख पैकेज हैं जो एक और अधिक उपयोगी पायथन आईडीई (वर्णमाला क्रम में) को लागू करने का प्रयास करते हैं:

वे सभी लगभग समान सुविधाएँ प्रदान करते हैं:

  • ऑटो-पूर्ण या कंपनी-मोड का उपयोग करके कोड पूरा करना
  • कोड नेविगेशन, जो कि परिभाषा / उपयोग पर जाता है
  • ElDoc का उपयोग करके फंक्शन सिग्नेचर डिस्प्ले
  • बिंदु पर प्रतीक पर प्रलेखन आत्मनिरीक्षण
  • सिंटैक्स फ्लाईमेक या फ्लाइचेक का उपयोग करके जांच करता है
  • और उनमें से कुछ (कम से कम एल्पी) के पास बुनियादी रीफैक्टरिंग समर्थन है

इन सबसे परे, Emacs आपको बहुत अधिक वर्कफ़्लो के साथ मदद कर सकता है, लेकिन यह किसी एक को भी निर्धारित नहीं करता है। इसलिए अगले चरण इस बात पर बहुत निर्भर करते हैं कि आप पायथन का उपयोग कैसे कर रहे हैं। यहां सबसे अच्छा तरीका एक अच्छा पायथन वर्कफ़्लो का पता लगाना होगा और फिर Emacs संकुल को खोजने की कोशिश करेंगे जो विशेष रूप से आपके वर्कफ़्लो पर चरणों के साथ आपकी सहायता करें।

उदाहरण के लिए, virtualenvs (Elpy, जिसे आप उल्लेख करते हैं, pyvenv के साथ आता है) के साथ काम करने के लिए कई पैकेज हैं, जिनका आपको उपयोग करना चाहिए। Emacs-Jedi में कोड ब्राउज़िंग के लिए एक साथ मोड है जो उपयोगी हो सकता है। यदि आप IPython का उपयोग कर रहे हैं, तो Emacs के लिए IPython नोटबुक है। Django विकास आदि के लिए विशेष समर्थन मोड हैं - आप http://melpa.org/ पर जा सकते हैं और कुछ विचार प्राप्त करने के लिए पायथन की खोज कर सकते हैं ।

पायथन के बाहर, आप कुछ अतिरिक्त एमएसीएस पैकेजों से लाभान्वित हो सकते हैं जो सामान्य रूप से विकास में मदद करते हैं। प्रोजेक्टाइल प्रोजेक्ट प्रबंधन के लिए एक सामान्य पैकेज है जो आपको कई दिलचस्प सुविधाएँ प्रदान करता है, जैसे प्रोजेक्ट में खोज या परीक्षण और कार्यान्वयन के बीच बढ़ना। यदि इसे अभी तक आपकी पसंद के आईडीई पैकेज से निर्भरता के रूप में स्थापित नहीं किया गया है, तो आप YASnippet का उपयोग भी कर सकते हैं जो कोड पीढ़ी के लिए बुद्धिमान स्निपेट प्रदान करता है। डिफ़ॉल्ट स्निपेट संग्रह में पायथन के लिए बड़ी संख्या में स्निपेट्स भी हैं।

लेकिन फिर, ऊपर दिए गए मुख्य IDE पैकेज से आपको एक समझदार वातावरण मिलेगा - अगले चरण आपके विशिष्ट वर्कफ़्लो पर बहुत निर्भर करते हैं।

(पूर्ण प्रकटीकरण: मैं एल्पी का लेखक हूं, इसलिए उपरोक्त पढ़ते समय इसे ध्यान में रखें।)


1
इस तरह की व्यापक प्रतिक्रिया के लिए बहुत-बहुत धन्यवाद, यह उन तरीकों से व्यापक रूप से उपयोगी साबित हुआ है जो अनगिनत लेखों में नहीं हुए हैं।
सीरियल एक्सचेंजिस्ट

2
धन्यवाद @ जोर्जेन। मैं elpyदैनिक उपयोग करता हूं और आपके उत्तर के बारे में एक त्वरित प्रश्न रखता हूं, जब आप कहते हैं कि " M-x pdbपायथन डिबगर चला सकते हैं" , यह वास्तव में कैसे है? मेरे पास पायथन बफर है, और जब मैं करता M-x pdbहूं मुझे मिनीबफ़र में एक संकेत मिलता है "Run pdb (like this): pdb my_file.py"। जब मैं प्रेस करता RETहूं तो मुझे "ImportError: pdb.pdb नाम का कोई मॉड्यूल नहीं मिलता है: 'pdb एक पैकेज नहीं है" यह सिर्फ पाइप से अपग्रेड करने के बाद नवीनतम PYthon 3.4 के साथ है, जो मुझे देता है:$ pip freeze | grep pdb => pdb==0.1
Amioio Vazquez-Reina

1
Pdb पायथन के साथ आता है। मुझे नहीं पता कि यह क्यों नहीं मिलेगा, मुझे डर है। :-(
जोर्गेन शेफर

@ JorgenSchäfer अगर pdbनहीं मिला है, लेकिन pythonस्थानीय स्तर पर पाया जाता है, तो आप pdb चला सकते हैं, फिर M-x pdb"pdb चलाएं (इस तरह): python -m pdb my_file.py '
क्रिसफ्रेन्स

मुझे docstrings लिखने के लिए sphinx-doc पैकेज उपयोगी लगता है।
अडकग

17

मैं दुष्ट- एमएसीएस उपयोगकर्ताओं को स्पेसमैक्स की कोशिश करने के लिए प्रोत्साहित करूंगा

इसमें एक शानदार अजगर-परत है, यहां विवरण देखें: https://github.com/syl20bnr/spacemacs/tree/master/layers/ -lang/python!

अब तक, इसमें शामिल हैं:

  • एनाकोंडा-मोड का उपयोग करते हुए ऑटो-पूर्ण
  • एनाकोंडा-मोड का उपयोग करके कोड नेविगेशन
  • एनाकोंडा-मोड और pylookup का उपयोग करके डॉक्यूमेंटेशन लुकअप
  • नाक या पेलस्ट का उपयोग करके टेस्ट रनर
  • आभासी पर्यावरण pyvenv का उपयोग कर
  • सिमेंटिक मोड सक्षम है
  • टट्टू-मोड के माध्यम से Django समर्थन

स्थापना हास्यास्पद रूप से आसान है, बस निम्नलिखित पंक्ति को अपने साथ जोड़ें ~/.spacemacs:

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

जिज्ञासा से बाहर जहां बिल्कुल .spacemacs में मुझे यह जोड़ना चाहिए? बहुत ऊपर ठीक है? इससे पहले (defun dotspacemacs / परतों) (...?
user391339

नामक एक सूची है dotspacemacs-configuration-layers। इसे वहाँ जोड़ें :)
Unfun Cat

4

मैं उद्देश्य-विधा का उपयोग करता हूं । यह आपको एक बहुत मजबूत वातावरण को परिभाषित करने की अनुमति देता है।

उपयोग करना elpy, pydocऔर neotreeमेरे पास एक बहुत मजबूत वातावरण है (इस अर्थ में कि विंडोज़ त्रुटियों पर अजीब चीजें नहीं करते हैं)। यह gud-pdbडिबगिंग के लिए भी बहुत अच्छा काम कर सकता है ।

neotree, अजगर-मोड, pydoc, और अवर अजगर (elpy के माध्यम से) के साथ अजगर के लिए emacs- उद्देश्य सेटअप


4

यहाँ एक व्यापक गाइड है: http://wikemacs.org/wiki/Python यह रेडी-टू- यूज़ सॉल्यूशंस (प्रिल्ड स्टार्टर किट , स्पेसमैक्स, डेटा साइंस के लिए समाधान , ...), बड़े उपयोगी पैकेजों (एल्पी, साथ ही साथ) की सूची देता है। प्रत्येक पैकेज के रूप में आपको अपने पर्यावरण को बेहतर बनाने की आवश्यकता है। यहाँ एक सिंहावलोकन है

पुनर्रचना

यह सबसे "आईडीई-विशिष्ट" सुविधा है। इस पर कुछ संभावनाओं के रूप में Emacs रोप अजगर पुस्तकालय के लिए धन्यवाद। यह MELPA में एमएसीएस -ट्रैड पैकेज को स्थापित करने और उपयोग करने का सबसे आसान तरीका है । यह दूसरों के बीच में है:

  • एक विधि हस्ताक्षर बदलें: क्रॉस-प्रोजेक्ट रीफैक्टरिंग (निश्चित रूप से) के साथ एक तर्क जोड़ें / निकालें,
  • कुछ भी नाम बदलें,
  • परिभाषाएँ खोजें, ...

एल्पी में रस्सी भी शामिल है।

सरल कोड हेरफेर

हमारे पास रीफ़ैक्टरिंग या कोड हेरफेर में मदद करने के लिए सरल उपकरण हैं: http://wikemacs.org/wiki/Python#Other_Python_.22refactoring.22_tools

उदाहरण के लिए, प्रक्षेप्य महान है (अन्य उत्तर देखें), हमारे पास डेकोरेटर्स को जोड़ने , तर्कों को जोड़ने / हटाने / संपादित करने, विधि का नाम बदलने / प्रतिलिपि बनाने / टिप्पणी करने / कोड जनरेशन के लिए एक टूल…

कोड नेविगेशन

हम टैग्स और कॉस्कोप के साथ आईडीई के रूप में नेविगेट कर सकते हैं: इस एक को कॉल करने वाले कार्यों को ढूंढें, घटनाओं को ढूंढें, आदि।

Emacs में imenu (helm-imenu), helm-swoop (एक बफर में इंटरेक्टिव grep), emacs-helm-ag (एक प्रोजेक्ट में इंटरेक्टिव सिल्वर खोजकर्ता), आदि जैसे बेहतरीन पैकेज भी हैं ।

परीक्षण चल रहा है

यह एल्पी है जो परीक्षणों को चलाने के लिए अच्छा समर्थन प्रदान करता है (django धावक, elpy या किसी अन्य के साथ)। हम वर्तमान में केवल इकाई परीक्षण भी चला सकते हैं: बहुत ही आसान! तो उस के साथ मदद करने के लिए एक हाइड्रा है (त्रुटियों के बीच पुटी, अजगर प्रांप्ट पर स्विच करें ...)।

समर्थन करें

यह एक Emacs पैकेज है जो पायथन के लिए विशिष्ट नहीं है। लेकिन मुझे प्रोजेक्ट में कहीं से भी एक टारगेट चलाना और पूरा करने के साथ मेक कमांड चुनना पसंद हैसंपर्क

डीलिंग इंडेंटेशन के साथ

वहाँ एक छोटे पैकेज, है मांगपत्र-उपकरण , कि आदेशों एक दांतेदार ब्लॉक के साथ सीधे काम देता है: इस कदम खरोज की अगली पिछली बच्चों के माता पिता के ब्लॉक करने के लिए, मांगपत्र / deindent / टिप्पणी / कॉपी / मारने / वर्तमान ब्लॉक गुना , आदि yaml के लिए बिल्कुल सही, और पायथन के लिए भी। डॉक्टर और जीआईएफ डेमो

Django समर्थन करते हैं

Django देखें । एल्पी, दजंगो धावक का समर्थन करता है। देखिए इलाजी django docdjango- मोड (मेलपा में) में हाइलाइटिंग, क्विक कमांड, मैनेजमेंट कमांड्स को पूरा करने के लिए टेम्प्लेट हैं ...

इसके अलावा महत्वपूर्ण: महान गिट, Github और Gitlab समर्थन करते हैं

मैगिथबथ जीथब पीआरएस बना सकते हैं, हम मुद्दों को ला सकते हैं और प्रतिबद्ध संदेशों में अपना संदर्भ डाल सकते हैं, मैगिट महान है, ... http://wikemacs.org/wiki/Git देखें


विशेष रूप से बड़ी और / या स्कूटेड परियोजनाओं में रिफैक्टिंग सुपर महत्वपूर्ण है जो किसी चीज को तोड़ना नहीं है। क्या कोई जानता है कि स्पेसमैक्स के साथ एमैक-ट्रैड को कैसे सेटअप किया जाए?
thinwybk

1

यहाँ के जवाबों में सबसे महत्वपूर्ण सुविधाएँ प्रदान की गई हैं, जो कि स्पेसमैक्स प्रदान करती है, लेकिन हमेशा एक विशेषता थी जिसके बारे में मुझे नहीं पता था - DEBUGGING (मुझे ऐसा कोई भी अच्छा डिबगिंग टूल नहीं मिला, जो हाल के दिनों तक स्पेसमैक्स के साथ अच्छी तरह से चलता हो)

तो मैंने अपने स्पेसमैक्स के लिए डिबग वर्कफ़्लो कैसे सेट किया?

विकास के तहत एक सुविधा शाखा है जो अंतरिक्ष में डिबग अनुभव की तरह आईडीई के करीब प्रदान करने के लिए realgud.el पैकेज का उपयोग करती है: https://github.com/CeleritasCelery/spacemacs आपको बस अपनी शाखा को अपने .emacs में खींचना है । डी निर्देशिका और अपने ~ / .emacs.d / परतों / + लैंग / अजगर / संकुल में कुछ बदलाव करें।

डीबग के लिए स्पेसमैक्स सेटअप करने के लिए विस्तृत चरण (गहरी सांस लें)

  1. अपने टर्मिनल में एक-एक करके नीचे दिए गए कमांड टाइप करें। यह 'डीबग-लेयर' नामक एक अलग शाखा में सेलेरिटासेलरी के स्पेसमेक्स में बदलाव करेगा। इसका मतलब है कि अगर कुछ गड़बड़ हो जाता है तो आप हमेशा मास्टर शाखा और वॉइला की जांच कर सकते हैं! आपका मूल स्पेसमाक्स वापस आ गया है!

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

  1. अब ~ / .emacs.d / परतों / + 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"))) package.el को खोलें और फ़ाइल के अंत में नीचे फ़ंक्शन जोड़ें। यह फ़ंक्शन trepan3k डीबगर को अजगर डीबगर के रूप में उपयोग करता है। आप मान को pdb या ipdb या जिस पर भी आप चाहें डिबगर बदल सकते हैं। यदि आप trepan3k का उपयोग करने की योजना बनाते हैं, तो सुनिश्चित करें कि आप इसे पाइप से स्थापित करें sudo pip install trepan3kक्योंकि यह आपके अजगर वितरण के साथ पहले से स्थापित नहीं है।

  2. अब अपनी .spacemacs फ़ाइल खोलें और इस तरह dotspacemacs-कॉन्फ़िगरेशन-लेयर्स के अंदर 'डीबग' परत dotspacemacs-configuration-layers '( (python :variables python-enable-yapf-format-on-save t flycheck-disabled-checkers '(python-flake8) flycheck-checker 'python-pylint ) debug )

  3. फिर स्पेसमैक्स रीस्टार्ट करें और किसी भी पाइथन फाइल को खोलें। आप Mx realgud टाइप करके डिबगिंग शुरू कर सकते हैं: trepan3k

यह डिबग सत्र शुरू करेगा और आप यहां बताए गए वास्तविक कीबाइंडिंग का उपयोग करके विराम बिंदुओं को जोड़ सकते हैं: https://github.com/realgud/realgud#source-window-commands

हो गया!


clyton का उत्तर ऊपर, git repo github.com/CeleritasCelery/debug-layer होना चाहिए । इसके लिए पीआर वर्तमान में github.com/syl20bnr/spacemacs/pull/9246
Oddbodbloke

(मैं प्रतिष्ठा की कमी के कारण टिप्पणी नहीं कर सकता) उपरोक्त को स्पेसमैक्स की विकसित शाखा में मिला दिया गया है, इसलिए चरण एक को अनदेखा किया जा सकता है।
Oddbodbloke
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.