2010-09-17 13 views
20

से अजगर प्रक्रिया का उपयोग करने मैं pdb का प्रयोग करना और आयात मुद्दों हो रही Emacs में कुछ अजगर कोड डिबगिंग कर रहा हूँ। निर्भरता मेरे bespoked वर्चुअलनेव वातावरण में से एक में स्थापित हैं।Emacs में हो रही pdb वर्तमान virtualenv

पीडीबी/usr/bin/पायथन का उपयोग करके जिद्दी रूप से है और मेरे वर्चुअलनेव से पायथन प्रक्रिया नहीं है।

मैं Emacs के भीतर और

http://jesselegg.com/archives/2010/03/14/emacs-python-programmers-2-virtualenv-ipython-daemon-mode/

में वर्णित postactivate हुक यह अच्छी तरह से काम करता है जब एमएक्स अजगर-खोल

>>> import sys 
>>> print sys.path 

इस अंक चल रहा है के माध्यम से वातावरण की स्विचिंग का समर्थन करने के virtualenv.el का उपयोग मेरे सभी वर्चुअलनेव पुस्तकालयों से संकेत मिलता है कि पायथन-खोल मेरे वर्चुअलएव का है।

यह एम द्वारा तथापि खण्डन किया है! जो अजगर, जो /usr/bin/अजगर

देता

किसी को भी पता है कि कैसे मैं एम एक्स pdb वर्तमान में सक्रिय virtualenv से अजगर प्रक्रिया को अपनाने के लिए बता सकते हैं?

+1

आपकी पोस्ट [मेरे पुराने वर्चुअलएएन पैकेज] (https://github.com/aculich/virtualenv.el) को संदर्भित करती है जिसे मैं अब बनाए रखता हूं; कम से कम 3 नए, सक्रिय रूप से बनाए रखा पैकेज हैं: [virtualenvwrapper] (https://github.com/porterjamesj/virtualenvwrapper.el), [pyvenv] (https://github.com/jorgenschaefer/pyvenv), [पायथन- पर्यावरण] (https://github.com/tkf/emacs-python-environment) – aculich

+0

उपयोगी अद्यतन - धन्यवाद @aculich – codeasone

उत्तर

8

python-shell वैरिएबल python-default-interpreter का उपयोग करने के लिए यह निर्धारित करने के लिए कि कौन सा पायथन दुभाषिया उपयोग करने के लिए उपयोग करता है। जब यह चर का मान cpython, चर python-python-command और python-python-command-args है दुभाषिया और उपयोग करने के लिए तर्क निर्धारित करने के लिए विचार-विमर्श किया गया है। वर्तमान वर्चुअल वातावरण को सेट करने के लिए उन दो चरों को virtualenv.el द्वारा छेड़छाड़ की जाती है।

तो जब आप python-shell कमांड का उपयोग करते हैं, तो यह बिना किसी समस्या के आपके वर्चुअल वातावरण का उपयोग करता है।

लेकिन, जब तुम एम करते हैं!python, आप चर का उपयोग नहीं कर रहे हैं python-python-command और python-python-command-args। तो यह आपके पथ में पाइथन टूल का उपयोग करता है।

जब आप फोन एम एक्सpdb यह डिफ़ॉल्ट pdb उपकरण के रूप में gud-pdb-आदेश-नाम का उपयोग करता। इस चर को फिर से परिभाषित करने के लिए, हर बार जब आप एक वातावरण सक्रिय करें, आपको कुछ इस तरह कर सकता है:

(defadvice virtualenv-activate (after virtual-pdb) 
    (custom-set-variables 
    '(gud-pdb-command-name 
     (concat virtualenv-active "/bin/pdb")))) 

(ad-activate 'virtualenv-activate) 

अपने आभासी वातावरण में pdb करवाने के लिए, निम्न करें:

cp /usr/bin/pdb /path/to/virtual/env/bin 

तो पहली पंक्ति को संपादित की/path// आभासी/env/bin/pdb करने के लिए:

#! /usr/bin/env python 

अपने env पुन: सक्रिय और PDB अब पूरे सिस्टम में अजगर के बजाय अपने virtualenv अजगर का उपयोग करना चाहिए।

+0

धन्यवाद जेरोम। दूसरों के लिए यह काम करने वाला नोट प्राप्त करने का प्रयास करने के लिए कि मुझे /bin पर cp/usr/bin/pdb करना था और वर्चुअलनव पायथन निष्पादन योग्य का उपयोग करने के लिए शेबैंग को बदलना था। ऐसा इसलिए है क्योंकि mkvirtualenv --no-site-packages आवश्यक पीडीबी को नव निर्मित वातावरण की/bin निर्देशिका में जमा नहीं करता है। उन विवरणों के लिए – codeasone

+0

Thx। आप फ़ाइलों की प्रतिलिपि से बचने के लिए एक प्रतीकात्मक लिंक भी बना सकते हैं। –

10

आह्वान इस तरह pdb:

python -m pdb myscript.py 

इसके बजाय

pdb myscript.py 
1

की संभवतः, अपने pdb आदेश एक निश्चित विशेष संस्करण से जुड़ा हुआ है।

$ ls -ald /usr/bin/pdb 
lrwxrwxrwx 1 root root 6 Jun 2 23:02 /usr/bin/pdb -> pdb2.6 

फिर, पीडीबी 2.6 की पहली पंक्ति देखें। यह

#! /usr/bin/python2.6 

शामिल यही कारण है कि pdb जिद्दी है और हमेशा अजगर का एक विशेष संस्करण के अंतर्गत चलाने के लिए लगता है। क्योंकि यह वास्तव में है! असल में, इस प्रकार की निर्भरता एक प्रतीकात्मक डीबगर जैसे सॉफ़्टवेयर के टुकड़े के लिए समझ में आता है।

मैंने स्रोतों से python2.7 संकलित किया है और पीडीबी जाहिर है, वहां नहीं है। कुछ जांच के बाद, मुझे lib फ़ोल्डर के तहत python-2.7 के लिए pdb.py मिला। मैं तो, यह करने के लिए कुछ सिमलिंक बना लिया है सुविधा के लिए:

$ cd /opt/python-dev ##-- this is where I installed from sources 
$ cd bin 
$ sudo ln -s ../lib/python2.7/pdb.py pdb2.7 
$ sudo ln -s pdb2.7 pdb 

अब pdb2.7 की पहली पंक्ति पर गौर करें। यह पढ़ता है:

#! /usr/bin/env python 

... जो पिछले संस्करण की तुलना में बेहतर दिखता है। यह मूल रूप से इसका मतलब है कि pdb वर्तमान अजगर आप अपने वातावरण, जो कुछ भी यह है में परिभाषित किया है के तहत, कुछ भी हार्डकोडेड के बजाय, /usr/bin/अजगर या /usr/bin/python2.6 हैं की तरह शुरू किया जाएगा। जानकार अच्छा लगा!

मैं भी, pdb और सिस्टम फ़ाइलों से pdb2.6 हटा दिया है एक बार मैं virtualenv अंदर/डिबग विकसित करने के लिए पसंद करते हैं। ऐसा करने से, मैं एक ही चाल से फिर से पकड़ा नहीं जाएगा।

मुझे उम्मीद है कि यह मदद करता है।