यदि आप अपने प्रश्न को एक छोटा सा संशोधित करने के इच्छुक हैं, तो आप इससे दूर हो सकते हैं।
यदि आपके पैकेज में केवल प्रवेश बिंदु नियंत्रित हैं; जैसे आप केवल testsuite package/.../module.py
लागू की तरह कुछ
तो आप यह सुनिश्चित करें कि सबसे पहले आपको import firstthing
है बना सकते हैं होगा जो कार्य करके अपने कोड का परीक्षण, और पैकेज में/firstthing.py आपके पास:
import sys
import os.path
packageDir = os.path.split(__name__)[0]
sys.path[:] = sys.path+[packageDir] # or maybe you want it first...
मुख्य चेतावनी यह है कि आप अपने एंट्री पॉइंट्स के बिना बिना पाइथन फाइलों को चलाने में सक्षम नहीं होंगे। मैं हमेशा पाइथन में लिखने वाली हर परियोजना के लिए ऐसा करना चाहता हूं (रिश्तेदार आयात अच्छी तरह से काम करने के लिए), लेकिन मुझे व्यक्तिगत रूप से यह इतना असुविधाजनक लगता है कि मैं अभी हार मानता हूं।
दूसरा विकल्प भी है। यह नहीं है यह निर्दिष्ट करने के लिए अनुचित है कि आपके पैकेज को पायथन पथ में एक और पैकेज की आवश्यकता है। यह पैकेज एक उपयोगिता पैकेज हो सकता है जो एक प्रमुख हैक करता है। उदाहरण के लिए यदि पैकेज का नाम "x" था, तो आप import x
कर सकते हैं जो दुभाषिया स्टैक पर प्रतिबिंब करने के लिए निरीक्षण मॉड्यूल का उपयोग करेगा, जिससे आप यह पता लगा सकें कि आप किस मॉड्यूल से इसे आयात कर रहे थे। तब तक जब तक आपको अपने पैकेज की जड़ नहीं मिलती है (कुछ विशेष संकेतक फ़ाइल, या मैनिफेस्ट, या कुछ की जांच करके) आप पैरेंट निर्देशिकाओं तक जाकर "पिछड़ा os.walk" कर सकते हैं। फिर कोड sys.path
के माध्यम से पाइथन पथ के उपर्युक्त संशोधन को प्रोग्रामेटिक रूप से निष्पादित करेगा। यह उपर्युक्त जैसा ही है, लेकिन आपके पास एक भयानक प्रविष्टि के माध्यम से बिना किसी पाइथन फ़ाइल चलाने जैसी चीजों को करने की स्वतंत्रता है।
यदि आपके पास शैल पर्यावरण पर अत्यधिक नियंत्रण है, तो आप अपनी पैकेज निर्देशिका को शामिल करने के लिए $ PYTHONPATH को भी बढ़ा सकते हैं, लेकिन यह कई तरीकों से बेहद नाजुक है, और बल्कि सुरुचिपूर्ण है।
लेखन का लघु एक बहुत ही अंतरंग हैक जैसे 'आयात x' जो 'sys को बदलता है।पथ ', या' बिल्टिन .__ import__' के अर्थशास्त्र को ओवरराइड करना या http://docs.python.org/library/functions.html#__import__ में सुझाए गए आयात हुक बनाना, आप एक बहुत ही उचित सुविधा की तलाश में हैं जो मौजूद नहीं है ज्यादातर भाषाओं में मुझे 2012 के बारे में पता है। मेरी विनम्र राय में, अजगर कुछ अन्य भाषाओं की तुलना में बेहतर अनुकूल है, लेकिन फिर भी विशेष रूप से गैर-वर्बोज़ आयात के लिए उपयुक्त है। "पायथनिक" यह देखते हैं कि इस तरह की क्रियाशक्ति स्पष्ट है, और इसलिए अच्छा है, शायद यह सुविधा आगामी नहीं होगी। – ninjagecko
मुझे पता था कि मुझे इसके बारे में बड़ा सौदा मिल जाएगा, आप वैसे भी प्रमुख रिफैक्टरिंग कर रहे हैं। लेखन कोड हर समय प्रमुख refactoring है। आप कई पैकेजों के साथ काम करते हैं, आप एक ही स्थान पर कुछ डालते हैं, फिर आप महसूस करते हैं कि यह बड़ी कार्यक्षमता है जिसका उपयोग कहीं और किया जा सकता है, इसलिए आप इसे किसी अन्य पैकेज में दोबारा प्रतिक्रिया देते हैं। ऐसी चीजें हैं जिन पर आपको चिंता करने की ज़रूरत है जब आप चीजों को चारों ओर ले जाते हैं तो मैं ओवरहेड को कम करने की कोशिश कर रहा हूं। वैसे, मेरे पास प्रत्येक पैकेज के शीर्ष पर एक एम 0 है, इसलिए जब कोई मॉड्यूल किसी अन्य पैकेज पर जाता है और फिर भी पहले पैकेज के शीर्ष पर m0 को संदर्भित करता है, तो त्रुटि प्रवण होती है। – gae123
हां, मैं सहमत हूं। फिर भी मुझे यकीन नहीं है कि आप क्या कह रहे हैं कि आप क्या कह रहे हैं। मैं नहीं पूछ रहा था "इस बारे में बड़ा सौदा क्या है"। – ninjagecko