2011-09-28 12 views
45

मैं अपने नाम में एक पानी का छींटा के साथ एक मौजूदा अजगर मॉड्यूल, foo-bar.pyअजगर मॉड्यूल अपने नाम में

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

क्या ऐसे मॉड्यूल को लोड करने का कोई तरीका है जिसका नाम आम तौर पर प्रतिबंधित '-' है?

(मुझे समझ में आता है कि यह सबसे अच्छा अभ्यास नहीं है। लेकिन इस स्थिति के लिए मैं फिर से डिजाइन नहीं करना चाहूंगा और अनुप्रयोगों का एक बड़ा सेट परीक्षण नहीं करूँगा। साथ ही मुझे नहीं लगता कि मेरे कॉर्पोरेट स्वामी मेरे लेने की स्वीकृति देंगे इस तरह के परिवर्तन को लागू करने का समय।)

+5

तुम बस ऐसा नहीं कर सकते एक में ढूँढें फ़ाइलों को अपने IDE में और सभी 'foo-bar's की जगह 'foobar' या जो कुछ भी के साथ? वह कितना मुश्किल है? – agf

+2

http://stackoverflow.com/questions/761519/is-it-ok-to-use-dashes-in-python-files-when-trying-to-import-them – BenH

+2

यह उत्तर विशेष रूप से: http: // stackoverflow.com/questions/761519/is-it-ok-to-use-dashes-in-python-files-when-trying-to-import-them/762693#762693 – BenH

उत्तर

64

आप __import__() का उपयोग कर ऐसा कर सकते हैं। उदाहरण के लिए:

foobar = __import__("foo-bar") 

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

+3

धन्यवाद। मैं समझता हूं कि व्यावहारिक जहां भी सम्मेलन का पालन किया जाना चाहिए। मैं एक विभागीय कोड समीक्षा के दौरान इस विशिष्ट मुद्दे को लाऊंगा। –

+13

इस दृष्टिकोण के साथ एक उप-मॉड्यूल काम कैसे आयात करेगा ?? – Fydo

25

मुझे पता है कि इस प्रश्न का पहले ही पूछताछ की संतुष्टि का उत्तर दिया गया है, लेकिन यहां एक और जवाब है जिसका मेरा मानना ​​है कि __import__() का उपयोग करके ऊपर कुछ योग्यता है।

import importlib 
mod = importlib.import_module("path.to.my-module") 
# mod.yourmethod() 

डॉक्स के अनुसार:

"This provides an implementation of import which is portable to any 
Python interpreter. This also provides an implementation which is 
easier to comprehend than one implemented in a programming language 
other than Python." 

Python 2.7 + केवल

+2

मैं यह खोज रहा था कि यह कैसे करना है और आपका उत्तर पुराने स्थिति की तुलना में मेरी स्थिति के लिए बेहतर लागू होता है। यह हमेशा अच्छा होता है यदि आप इसे पहले से मौजूद एक अलग उत्तर के रूप में जोड़ने के लिए एक अलग उत्तर देखते हैं ताकि लोगों की तरह एक स्थिति में सभी प्रासंगिक जानकारी एक ही स्थान पर मिल सके। –

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