2010-06-01 16 views
12

के बजाय पाइथन मानक लाइब्रेरी से फोर्स आयात मॉड्यूल मेरे पास मेरे PYTHONPATH में एक निर्देशिका में एक मानक मॉड्यूल है जो मानक लाइब्रेरी मॉड्यूल में से एक के समान नाम है, ताकि जब मैं import module_name, उस मॉड्यूल को लोड हो जाए। यदि मैं मूल मानक लाइब्रेरी मॉड्यूल का उपयोग करना चाहता हूं, तो क्या Python को PYTHONPATH निर्देशिका के बजाय मानक लाइब्रेरी से आयात करने के लिए मजबूर करने का कोई तरीका है, कस्टम मॉड्यूल का नाम बदलने और नए संदर्भ को इंगित करने के लिए प्रत्येक संदर्भ को बदलने से कम?पायथन मानक लाइब्रेरी से PYTHONPATH डिफ़ॉल्ट

+0

अपने मॉड्यूल का नाम बदलने के बारे में इतना बुरा क्या है? –

+0

इसमें दर्जनों फ़ाइलों में बदलाव करना शामिल होगा। ऐसा लगता है कि यह सबसे अच्छा समाधान है हालांकि। – jrdioko

+0

आपके पास 'grep' है, इसलिए प्रत्येक को ढूंढना और उन्हें ठीक करना मुश्किल नहीं होना चाहिए। –

उत्तर

11

आदर्श समाधान मानक पुस्तकालय में नहीं कुछ करने के लिए अपने मॉड्यूल नाम बदलने के लिए किया जाएगा।

तुम भी switch absolute imports on अगर आप अजगर 2.5+ पर हैं कर सकते हैं:

from __future__ import absolute_import 
+0

मानक पुस्तकालय संस्करण को पकड़ने के लिए मैं सापेक्ष आयात का उपयोग कैसे करूं? – jrdioko

+0

मैंने आपके प्रश्न, संपादित उत्तर को गलत समझा। –

+0

यह वास्तव में मदद नहीं करेगा? –

5

आपने मॉड्यूल आप imp मॉड्यूल के साथ आयात करना चाहते हैं चुन सकते हैं:

import imp 
mymodule = imp.load_module(name, file, pathname, description) 
9

मत करो।

यदि आपने गलती से मानक लाइब्रेरी मॉड्यूल नाम चुना है, तो संघर्ष समाप्त करने के लिए अपना मॉड्यूल नाम बदलें।

/home/me/myproject

से एक के लिए MyProject निर्देशिका में एक प्रतीकात्मक कड़ी बनाओ:

+0

यह शायद सबसे अच्छा समाधान है, दोनों आने वाले कोडर में भ्रम पैदा करने के लिए नहीं, और तथ्य यह है कि एक मॉड्यूल आयात करने वाला व्यवहार जो पहले से ही एक सापेक्ष आयात नहीं था, पूर्ण आयात के साथ बदल नहीं जाएगा। –

-1

ऐसा करने के लिए सबसे अच्छा तरीका है एक निर्देशिका में अपनी परियोजना लगाने के लिए मान लीजिए कि "MyProject" पर रहता है कि चलो है डिफ़ॉल्ट अजगर पथ, उदाहरण के लिए:

# ln -s /home/me/myproject /usr/local/lib/python2.7/dist-packages/myproject

अब जब आप चाहते हैं अपनी परियोजना के भीतर एक मॉड्यूल आयात करने के लिए बस एक अजगर दुभाषिया खोलें।

>>> from myproject.mymodule import *

यह एक आकर्षण की तरह काम करेगा।

एक आखिरी बात, अपने प्रोजेक्ट को पाइथन पथ में पाए गए जैसा ही नाम न दें, इसलिए आयात करते समय आपको कोई समस्या नहीं होगी।

+0

'पायथनपथ' का उपयोग करने का एक बेहतर तरीका होगा। इसके अलावा 'x आयात * से' का उपयोग न करें क्योंकि यह स्थैतिक विश्लेषण टूल को भ्रमित करता है और यह समझना मुश्किल बनाता है कि एक चर कहाँ से आता है। – bfontaine

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