2015-02-24 9 views
64

मैंने एक मॉड्यूल लिखा है (फ़ाइल my_mod.py फ़ाइल my_module फ़ोल्डर में रहने वाली फ़ाइल)। वर्तमान में, मैं cool_script.py फ़ाइल में काम कर रहा हूं जो cur_proj फ़ोल्डर में रहता है। मैंने फ़ाइल - ओपन (और मुझे लगता है कि, यह एक PyCharm प्रोजेक्ट है) का उपयोग कर PyCharm में फ़ोल्डर खोला है।PyCharm त्रुटि: अपने मॉड्यूल (पायथन स्क्रिप्ट) को आयात करने का प्रयास करते समय 'नो मॉड्यूल'

प्रोजेक्ट व्यू (सीएमडी -7) में, मैं अपनी परियोजना cur_proj (लाल रंग में) और "बाहरी पुस्तकालयों" के अंतर्गत देख सकता हूं, मुझे my_module दिखाई देता है। cool_script.py में, मैं

from my_module import my_mod as mm 

लिख सकते हैं और PyCharm भी my_mod के लिए सुझाव बनाता है। अब तक सब ठीक है।

हालांकि, जब मैं cool_script.py चलाने का प्रयास, PyCharm मुझे "नहीं मॉड्यूल नामित my_module"

यह मेरे लिए अजीब लगता है, बताता है क्योंकि

टर्मिनल में ए) (ओएस 10.10.2), पायथन में, मैं मॉड्यूल को कोई समस्या नहीं आयात कर सकता हूं - PYTHONPATH में .bashrc

बी) PyCharm - सेटिंग्स - प्रोजेक्ट cur_proj - प्रोजेक्ट इंटरप्रेटर - पागथन i के बगल में CogWheel nterpreter - अधिक - चयनित दुभाषिया आइकन के लिए पथ दिखाएं, PYTHONPATH के पथ प्रकट होते हैं (जैसा कि मुझे लगता है कि उन्हें चाहिए)

इसलिए, जब मैं cool_script.py चलाने की कोशिश करता हूं तो मुझे त्रुटि क्यों मिलती है? - मुझे क्या याद आ रही है?

नोट्स:

परिशिष्ट 2015-Feb-25

जब मैं PyCharm चलाने के लिए में जाना - संपादित विन्यास, मेरे वर्तमान परियोजना के लिए, वहाँ दो विकल्प है कि एक जाँच चिह्न के साथ चुना जाता है कर रहे हैं: "PYTHONPATH करने के लिए सामग्री जड़ों जोड़ें" और "PYTHONPATH पर स्रोत जड़ जोड़ें"। जब मेरे पास अनचेक दोनों होते हैं, तो मैं अपना मॉड्यूल लोड कर सकता हूं।

तो यह अब काम करता है - लेकिन क्यों?

आगे के प्रश्न उभरा:

  • "सामग्री जड़ों" क्या कर रहे हैं और "स्रोत जड़ों" क्या हैं? और PythonPATH में कुछ जोड़ने क्यों इसे किसी तरह तोड़ देता है?
  • क्या मुझे उन दोनों विकल्पों को हर समय अनचेक करना चाहिए (इसलिए डिफ़ॉल्ट रूप से, न केवल प्रोजेक्ट विशिष्ट कॉन्फ़िगरेशन (रन/डीबग कॉन्फ़िगरेशन डायलॉग का बायां पैनल)?
+1

आपने पहले से ही यह कोशिश की हो सकती है लेकिन अन्य पैकेजों से मॉड्यूल आयात करते समय, foldagen.mymodule आयात mymethod' से पैकेजगेम 'शामिल करें। एक और चीज जो मुझे करना है वह है कि आप अपने मॉड्यूल पर पहुंचने के लिए उपयोग किए जाने वाले सभी फ़ोल्डर्स में खाली __init_.py फ़ोल्डर जोड़ना चाहते हैं ताकि 'parentfolder.childfolder.mymodule से' ... के मामले में आपको init की आवश्यकता होगी दो फ़ोल्डर्स फ़ोल्डरों को एक-दूसरे के सापेक्ष स्थित कहां स्थित है, इस पर आपको [sys.path' में शीर्ष स्तर का पैकेज होना चाहिए जैसा कि इस [उत्तर] में वर्णित है (http://stackoverflow.com/questions/8951255/import-script- से-ए-पैरेंट-डायरेक्टरी) – ziddarth

+4

मुझे आपकी समस्या भी थी। निम्नलिखित पोस्ट ने मेरे मुद्दों को हल किया: http://stackoverflow.com/questions/21236824/unresolved-reference-issue-in-pycharm – user3155053

+0

क्या आप पहचानते हैं कि उन चेकबॉक्स को अनचेक करना वास्तव में उनको जांचने के विरोध में क्यों काम करता है? –

उत्तर

4

my_module एक फ़ोल्डर नहीं एक मॉड्यूल है और आप आयात नहीं कर सकते एक फ़ोल्डर, cool_script.py रूप में एक ही फ़ोल्डर में my_mod.py ले जाने का प्रयास और फिर import my_mod as mm है। इसका कारण यह है अजगर केवल वर्तमान निर्देशिका और sys.path में लग रहा है, और इतने अभ्यस्त my_mod.py लगता है जब तक कि यह एक ही निर्देशिका

में है या फिर आप एक जवाब आपको बता रहा है कि कैसे अन्य निर्देशिकाओं से आयात करने के लिए here देख सकते है।

आपके अन्य प्रश्नों के अनुसार, मुझे नहीं पता कि मैं PyCharm का उपयोग नहीं करता हूं।

+0

आप किसी फ़ोल्डर में __init__.py बना सकते हैं, पायथन दुभाषिया पाइथन पैकेज के रूप में पढ़ेगा: http://mikegrouchy.com/blog/2012/05/be-pythonic-__init__py.html –

0

सामग्री जड़ें आपके प्रोजेक्ट कोड को रखने वाले फ़ोल्डर्स हैं जबकि स्रोत जड़ों को भी परिभाषित किया जाता है। मुझे समझने के लिए एकमात्र अंतर यह था कि स्रोत जड़ों में कोड सामग्री रूट में कोड से पहले बनाया गया है।

उन्हें अनचेक करना उस समय तक रनटाइम को प्रभावित नहीं करेगा जब तक कि आप अपने पैकेज में अलग-अलग मॉड्यूल नहीं बना रहे हैं जो मैन्युअल रूप से Django से जुड़े हुए हैं। इसका मतलब है कि यदि आपकी कोई भी फाइल 'django आयात से ...' नहीं रखती है या किसी भी फ़ंक्शन को django के माध्यम से नहीं कहा जाता है, तो इन 2 विकल्पों को अनचेक करने से परिणाम खराब हो जाएगा।

अद्यतन - केवल वर्चुअल एनवायरमैननेट का उपयोग करते समय समस्या उत्पन्न होती है, और केवल प्रदान किए गए टर्मिनल के माध्यम से प्रोजेक्ट को नियंत्रित करते समय। टर्मिनल अभी भी डिफ़ॉल्ट सिस्टम pyhtonpath के माध्यम से काम करता है और वर्चुअल एनवी नहीं। जबकि पायथन django नियंत्रण पैनल ठीक काम करता है।

0

यह तब हो सकता है जब पाइथन दुभाषिया आपका कोड नहीं ढूंढ पाता है। इस स्थान पर अपना कोड ढूंढने के लिए आपको स्पष्ट रूप से पायथन पर उल्लेख करना होगा।

ऐसा करने के लिए:

  • अपने अजगर कंसोल पर जाएं
  • अजगर कंसोल के लिए sys.path.extend(['your module location']) जोड़ें।

आपके मामले में: जब आप इस कथन आपके द्वारा लिखी गई

import sys 
sys.path.extend([my module URI location]) 
  • :

    • अपने अजगर कंसोल पर जाएं,
    • शुरुआत पर, निम्नलिखित कोड लिखने निम्न आदेश चला सकते हैं:

      from mymodule import functions 
      
  • 2

    मुझे "PythonPATH में स्रोत जड़ जोड़ें" के साथ त्रुटि मिल रही थी। मेरी समस्या यह थी कि मेरे पास एक ही नाम के साथ दो फ़ोल्डर्स थे, जैसे प्रोजेक्ट/सबप्रोजेक्ट 1/चीज़/src और project/subproject2/thing/src और मैंने दोनों को स्रोत रूट के रूप में चिह्नित किया था। जब मैंने "चीज़" फ़ोल्डरों में से एक को "चीज़ 1" (किसी भी अद्वितीय नाम) में बदल दिया, तो यह काम करता था।

    शायद यदि PyCharm स्वचालित रूप से चयनित स्रोत जड़ों को जोड़ता है, तो यह पूर्ण पथ का उपयोग नहीं करता है और इसलिए उसी नाम से फ़ोल्डर्स को मिश्रित करता है।

    137

    यदि आपका स्वयं का मॉड्यूल एक ही पथ में है, तो आपको पथ को Sources Root के रूप में चिह्नित करने की आवश्यकता है। प्रोजेक्ट एक्सप्लोरर में, उस निर्देशिका पर राइट-क्लिक करें जिसे आप आयात करना चाहते हैं।फिर Mark Directory As का चयन करें और Sources Root चुनें।

    मुझे उम्मीद है कि इससे मदद मिलती है।

    +2

    यह मेरे लिए काम करता था लेकिन मेरे पास भी था फ़ोल्डर कॉन्फ़िगरेशन के रूप में फ़ोल्डर को चिह्नित करने से पहले मैंने पहले चलाए गए रन कॉन्फ़िगरेशन को हटाने और फिर से बनाने के लिए। – grinch

    +0

    और पाइथन को निर्देशिका वाले पैकेजों के रूप में बनाने के लिए '__init __। Py' जोड़ने की आवश्यकता है: http://stackoverflow.com/questions/448271/what-is-init-py-for#answer-448279 –

    +0

    आप यह कैसे करेंगे अगर आप पिचर्म का उपयोग नहीं कर रहे थे? मैं एक ही समस्या में भाग रहा हूँ। –

    1

    महत्वपूर्ण भ्रमित कदम जो किया जाना चाहिए वह स्रोत फ़ाइल के लिए रन कॉन्फ़िगरेशन को फिर से बनाना है जिसे आप निष्पादित करने का प्रयास कर रहे हैं, ताकि आईडीई नए पथ उठा सके।

    जिस तरह से वास्तव में मेरे लिए काम किया गया था वह रन/एडिट कॉन्फ़िगरेशन पर जाना था ..., उस फ़ाइल के लिए कॉन्फ़िगरेशन का चयन करें जिसे आप बाईं तरफ चलाने की कोशिश कर रहे हैं, "पाइथोनपैट में स्रोत जड़ जोड़ें" अनचेक करें बॉक्स, सेव करें, और फिर वापस जाएं और बॉक्स को चेक करें और सेव करें। फिर यह काम करेगा।

    3

    मैंने जो भी प्रयास किया वह उस स्थान को स्रोत करना है जहां मेरी फाइलें हैं।

    उदा। -> सेटिंग -> परियोजना E:\git_projects\My_project\__init__.py is my location.

    मैं फ़ाइल के लिए चला गया: My_project -> परियोजना संरचना और करने के लिए उल्लेख जगह के बारे में E:\git_projects\My_project

    यह मेरे लिए काम किया सामग्री जड़ गयी।

    +0

    स्रोत संरचना में फ़ोल्डर मेरे लिए काम करता है। धन्यवाद। – Microos

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