2011-09-19 9 views
7

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

from BeautifulSoup import BeautifulSoup 

हालांकि, जब मैं मॉड्यूल मैं लिख रहा हूँ वितरित करना, दूसरों BeautifulSoup नहीं हो सकता है, तो मैं बस शामिल करेंगे मेरी निर्देशिका संरचना में यह इतना की तरह:

from BeautifulSoup.BeautifulSoup import BeautifulSoup, CData 

लेकिन देव यदि क्या:

Mode    LastWriteTime  Length Name 
----    -------------  ------ ---- 
d----   9/19/2011 5:45 PM   BeautifulSoup 
-a---   9/17/2011 8:06 PM  4212 myscript.py 

अब, मेरी संशोधित myscript.py फ़ाइल शीर्ष पर इस तरह दिखेगा BeautifulSoup की स्थानीय प्रतिलिपि को संदर्भित करने के एल्पर जो मेरी लाइब्रेरी का उपयोग करता है पहले से ही सुंदर मशीन अपने मशीन पर स्थापित है? मैं myscript.py को संशोधित करना चाहता हूं ताकि यह देखने के लिए जांचें कि क्या सुंदर सूप पहले से स्थापित है या नहीं, और यदि ऐसा है, तो मानक मॉड्यूल का उपयोग करें। अन्यथा, शामिल एक का उपयोग करें।

का उपयोग करते हुए छद्म अजगर:

if fBeautifulSoupIsInstalled: 
    from BeautifulSoup import BeautifulSoup, CData 
else: 
    from BeautifulSoup.BeautifulSoup import BeautifulSoup, CData 

यह संभव है? यदि हां, तो कैसे?

+1

http://effbot.org/zone/import-confusion.htm से लिया: 'जब अजगर एक मॉड्यूल का आयात करता है, यह पहली चेकों मॉड्यूल रजिस्ट्री (sys.modules) करने के लिए देखें कि मॉड्यूल पहले से ही आयात किया गया है या नहीं। यदि ऐसा है, तो पायथन मौजूदा मॉड्यूल ऑब्जेक्ट का उपयोग करता है। ' – mwan

+0

इसे आयात करने का प्रयास करें। यदि यह काम नहीं करता है, तो आयात करें और अपनी स्थानीय प्रतिलिपि से आयात करें। अपनी स्थानीय प्रतिलिपि को कुछ और (myBeautifulSoup) नाम दें ताकि यह उपयोगकर्ता स्थापित मॉड्यूल को छिपा न सके। –

+0

@mwan: बेन को यह जानने की आवश्यकता नहीं है कि यह पहले से ही * आयातित * है, उसे पता होना चाहिए कि यह पहले से ही * सिस्टम पर है या नहीं। –

उत्तर

15

आमतौर पर पाइथन में इस स्थिति को संभालने के लिए निम्न पैटर्न का उपयोग किया जाता है।

सबसे पहले अपने सुंदर सूप मॉड्यूल का नाम बदलें, उदाहरण के लिए MyBeautifulSoup

तब:

try: 
    import BeautifulSoup # Standard 
except ImportError: 
    import MyBeautifulSoup as BeautifulSoup # internal distribution 

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

  • कोई संबंधित समस्या नहीं^_^