2015-03-10 8 views
14

मैं एक छलबल से PyCharm/इंटेलीजे समुदाय संस्करणों का उपयोग डिबग अजगर स्क्रिप्ट लिखने और करने के लिए, लेकिन अब मैं एक पायथन मॉड्यूल डिबग करने के लिए कोशिश कर रहा हूँ, और PyCharm करता है एक गलत कमांड लाइन निर्देश पार्सिंग, निष्पादन त्रुटि उत्पन्न हो रहा है, या शायद मैं एक खराब विन्यास कर रहा हूँ।Intellij/Pycharm नहीं कर सकते हैं डिबग अजगर मॉड्यूल

यह मेरा रन/डिबग विन्यास है:

IntelliJ run/debug Python module configuration

और यह क्रियान्वित किया जाता है जब मैं मॉड्यूल (यहाँ कोई समस्या नहीं) चलाएँ:

/usr/bin/python3.4 -m histraw 

लेकिन जब मैं डिबग, यह है IntelliJ कंसोल में आउटपुट:

/usr/bin/python3.4 -m /opt/apps/pycharm/helpers/pydev/pydevd.py --multiproc --client 127.0.0.1 --port 57851 --file histraw 
/usr/bin/python3.4: Error while finding spec for '/opt/apps/pycharm/helpers/pydev/pydevd.py' (<class 'ImportError'>: No module named '/opt/apps/pycharm/helpers/pydev/pydevd') 

Process finished with exit code 1 

जैसा कि आप देख सकते हैं, पैरामीटर गलत पार्स किए गए हैं, और -m विकल्प के बाद एक इंटेलिजे डीबग स्क्रिप्ट मॉड्यूल नाम से पहले पारित की जाती है।

मैं भी सिर्फ स्क्रिप्ट क्षेत्र में -m histraw डाल की कोशिश की है, लेकिन काम नहीं करता है, उस क्षेत्र केवल अजगर स्क्रिप्ट पथ, नहीं मॉड्यूल डाल करने के लिए है।

कोई विचार?

+0

-m पैरामीटर का उपयोग करके अपनी स्क्रिप्ट चलाकर आप वास्तव में क्या हासिल करने की कोशिश कर रहे हैं और सीधे नहीं? जहां तक ​​मैं समझता हूं कि -एम स्विच मानक पुस्तकालय मॉड्यूल चलाने में आसान बनाने के लिए डिज़ाइन किया गया था; यह आपकी अपनी स्क्रिप्ट के लिए कोई लाभ नहीं लाता है। – yole

+1

क्योंकि मैं एक * वितरित कमांड लाइन स्क्रिप्ट * लिख रहा हूं, और यह आपके सिस्टम 'पाथ' में एक निष्पादन योग्य कमांड लाइन उपकरण के रूप में setuptools और pip tools के साथ स्थापित करने योग्य है। जब आप पाइथन में एक वास्तविक कमांड लाइन लिखते हैं, तो 'setuptools' इसे अपने सिस्टम वातावरण में एक नई स्टैंडअलोन स्क्रिप्ट के साथ स्थापित करता है, और ** यह स्क्रिप्ट आपकी मूल स्क्रिप्ट को मॉड्यूल ** के रूप में कॉल करती है।यह कोड चलने पर हानिरहित जैसा दिख सकता है, लेकिन ऐसा नहीं है, क्योंकि "पर्यावरण" बदलता है, और आपके कोड के कुछ हिस्सों में प्रतिक्रिया हो सकती है, विशेष रूप से मॉड्यूल आयात विवरण, या sys को कॉल। * पैकेज, आदि – Mrdev

+0

तो आप एक स्क्रिप्ट की एक प्रति क्यों नहीं बनाते हैं जो setuptools बनाते हैं, और उस स्क्रिप्ट को PyCharm रन कॉन्फ़िगरेशन से चलाते हैं? – yole

उत्तर

16

इसे काम करने का एक और तरीका है। आप अपने मॉड्यूल को चलाने के लिए एक पायथन स्क्रिप्ट लिख सकते हैं। फिर इस स्क्रिप्ट को चलाने के लिए PyCharm को कॉन्फ़िगर करें।

import sys 
import os 
import runpy 
path = os.path.dirname(sys.modules[__name__].__file__) 
path = os.path.join(path, '..') 
sys.path.insert(0, path) 
runpy.run_module('<your module name>', run_name="__main__",alter_sys=True) 

फिर डीबगर काम करता है।

+0

यह बहुत अच्छी तरह से काम करता है, sys.path संशोधन की आवश्यकता आपके प्रोजेक्ट लेआउट और कार्यशील निर्देशिका सेटअप के आधार पर भी आवश्यक नहीं है। – toabi

+0

इस स्क्रिप्ट को चलाने के लिए आप PyCharm को कैसे और कहां कॉन्फ़िगर करते हैं? – slashdottir

+0

[चलाएं -> कॉन्फ़िगरेशन संपादित करें] स्क्रिप्ट: उपरोक्त स्क्रिप्ट। स्क्रिप्ट पैरामीटर: "-m module_name" को छोड़कर आपके सभी मूल पैरामीटर। – RyanLeiTaiwan

-2

समस्या पहले से ही PyCharm 4.5.2 के बाद तय की गई है। PyCharm ट्रैकर में संबंधित समस्या देखें: https://youtrack.jetbrains.com/issue/PY-15230

+1

यदि आप कोई नई सुविधा का उपयोग करने के लिए टिप्पणी या दस्तावेज़ नहीं करते हैं, तो ऐसा लगता है कि यह सुविधा मौजूद नहीं है। यह उस फिक्स का मामला है, मैंने पेचर्म 4.5.3 के साथ फिर कोशिश की, और मुझे एक ही समस्या थी, लेकिन मुझे यकीन नहीं था कि यह समस्या इसलिए हल नहीं हुई थी, या क्योंकि पाइथन डीबग करने के लिए एक नई विशेष सुविधा है मॉड्यूल, लेकिन यह सुविधा दस्तावेज नहीं है कि इसका उपयोग कैसे किया जाए। – Mrdev

+0

इसके अलावा, यहां उल्लिखित लिंक एक टिकट को इंगित करता है जिसे फिर से खोल दिया गया है; तो समस्या ठीक नहीं है। – Reinderien

1

मुझे निम्न सामग्री के साथ बूटस्ट्रैप फ़ाइल (debuglaunch.py) बनाने में सबसे आसान लगता है।

from {package} import {file with __main__} 

if __name__ == '__main__': 
    {file with __main__}.main() 

उदाहरण के लिए, pycharm डीबगर में locustio शुरू करने के लिए, मैं इस तरह debuglaunch.py ​​बनाया:

from locust import main 

if __name__ == '__main__': 
    main.main() 

और कॉन्फ़िगर किया गया pycharm इस प्रकार है।

pycharm_debug_config

नोट: मैंने पाया मैं डीबगर में तोड़ने में सक्षम जब तक कि मैं main.main पर एक ब्रेकपाइंट जोड़ा नहीं था()। हालांकि, यह टिड्डियो के लिए विशिष्ट हो सकता है।

संबंधित मुद्दे