इसके नाम के साथ एक डैश, या हाइफ़न (-) वाला पायथन मॉड्यूल


92

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

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

क्या किसी मॉड्यूल को लोड करने का एक तरीका है जिसका नाम आम तौर पर निषिद्ध है - '?

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


5
आप अपनी IDE में केवल एक फाइंड-इन-फाइल्स नहीं कर सकते हैं और सभी foo-bars को प्रतिस्थापित कर सकते हैं foobarया जो भी हो कितना कठिन है?
agf


2
यह उत्तर विशेष रूप से: stackoverflow.com/questions/761519/…
BenH

लघु जवाब: यह मेरे सभी कोड नहीं है।
हफमैन

S.Lott अन्य उपयोगकर्ता वाणिज्यिक अनुप्रयोग हैं। जो मुझे पता है कि यह कैसे संभव है।
हफमैन

जवाबों:


98

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

foobar = __import__("foo-bar")

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


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

57

मुझे पता है कि यह प्रश्न पहले से ही पूछने वाले की संतुष्टि के लिए उत्तर दिया गया है, लेकिन यहां एक और उत्तर है जो मेरा मानना ​​है कि उपयोग करने के ऊपर कुछ योग्यता है __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 + केवल


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

0

एक हाइफ़न के बजाय अंडरस्कोर का उपयोग करने का प्रयास करें।

आयात pymysql_utils

मेरे लिए काम किया भले ही आयात pymysql-utils पाइप द्वारा उपयोग किए गए मॉड्यूल का नाम था

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.