2012-07-13 16 views
5

मैं अजगर के साथ प्रयोग कर रहा हूं, ज्यादातर अन्य लोगों के कोड की समस्या निवारण। मैं प्रोग्राम चलाने के लिए एक प्रोग्राम प्राप्त करने की कोशिश कर रहा हूं, "path\folderA\program.py"। एक आयातकिसी अन्य फ़ोल्डर से विफल पाइथन आयात

ImportError: No module named fff.ggg.ppp 

program.py शामिल:

मैं path\folderA

से कार्यक्रम चला रहा हूँ मैं एक त्रुटि हो रही है

from fff.ggg.ppp import mmm 

फ़ोल्डर में "पथ \ folderB" वहां हैं: "path\folderB\fff\__init__.py" "path\folderB\fff\ggg"

फ़ोल्डर ggg भी __init__.py, साथ ही कार्यक्रम ppp.py

शामिल पढ़ने अन्य पदों से, Python error "ImportError: No module named" की तरह मैं समझता हूँ कि __init__.py होने एक फ़ोल्डर एक "पैकेज" जो यह संभव से आयात करता है बनाता है - लेकिन यह 'नहीं करता है टी काम, क्योंकि मुझे एक त्रुटि मिल रही है।

यह उन अन्य लोगों के लिए काम कर रहा है जो इन परियोजनाओं के साथ काम करते हैं, इसलिए मेरे सेटअप में कुछ गड़बड़ है।

मैंने sys.path में होने वाली निर्देशिकाओं के बारे में कुछ पढ़ा है। क्या इसका मतलब है कि मुझे उन्हें पर्यावरण परिवर्तनीय पथ में जोड़ना है? इसका मतलब है कि पैथ में बहुत सारी निर्देशिकाएं जोड़ना, हालांकि यह नहीं हो सकता है।

तो मैंने यह भी पाया निम्नलिखित:

import sys 
sys.path.append(<path to FolderB>) 

लेकिन उस कोड (जो है अन्य लोगों के लिए आवश्यक नहीं किया गया है) और क्या यह मेरे स्थानीय मशीन पर है करने के लिए एक रास्ता हार्ड-कोड को बदलने का मतलब है - जो मुझे नहीं करना चाहिए, है ना?

मैं इसे कल्पना नहीं कर सकता - जाहिर है, मुझे कोड मॉड्यूल और हार्ड मॉड्यूल को आयात मॉड्यूल में भौतिक पथ नहीं बदलना चाहिए - तो फ़ोल्डर ए से प्रोग्राम को आयात के लिए फ़ोल्डर बी में कैसे देखना चाहिए?

__init__.py का जादू कैसे काम करता है?

+1

पायथन 'पायथनपथ' पर्यावरण चर में दिखता है, न कि 'पथ' – mgilson

उत्तर

1

I can't visualize it - apparently I am not supposed to change the code and hard-code the physical path to the import module - so how can a program from folderA even know to look in folderB for an import ?

आप सही हैं। किसी भी तरह आपको फ़ोल्डर बी में आयातित मॉड्यूल की तलाश करने के लिए पायथन बताना होगा। __init__.py जादू नहीं है जो आपको अपने हार्ड ड्राइव पर अन्य फ़ोल्डर्स से आयात करने देता है।

आमतौर पर, यदि आपके पास विभिन्न अलग-अलग पायथन पैकेज हैं, तो वे पाइथन पुस्तकालय में स्थापित होने के द्वारा काम करते हैं। इस तरह वे कहीं से भी आयात कर सकते हैं। यह आमतौर पर setup.py स्क्रिप्ट द्वारा पूरा किया जाता है। जांचें कि folderB में एक है या नहीं।इसे python setup.py install के साथ चलाएं।

यदि यह काम नहीं करता है, तो हमें इस कोड को संरचित करने के तरीके के बारे में अधिक जानकारी की आवश्यकता होगी।

+0

धन्यवाद, मैंने setup.py देखा था लेकिन इसका उपयोग नहीं किया गया था। इसने काम कर दिया ! – Thalia

0

फ़ोल्डर बी sys.path पर होना चाहिए, इसलिए आपको या तो एमएम को ए में स्थानांतरित करने की आवश्यकता होगी, या ए के भीतर से sys.path को संशोधित करने की आवश्यकता होगी (सुनिश्चित नहीं है कि यह काम करता है)। __init__.py पायथन बताता है कि फ़ोल्डर एक पैकेज है, इसलिए आपके पास __init__.py के साथ फ़ोल्डर __init__.py के साथ फ़ोल्डर्स के भीतर हो सकते हैं और पायथन फ़ोल्डर्स को मूल फ़ोल्डर के हिस्सों के रूप में अंदर रखता है। सिम्पी या लगभग किसी भी बड़े पायथन पुस्तकालय की जांच करें और आपको ऐसी संरचना मिल जाएगी। इसमें आयात पर चलाने के लिए कोड भी हो सकता है, लेकिन यह खाली भी हो सकता है।

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