मुझे लगता है कि प्योरिटीलेक और मार्टिजन पीटर के सहायक मैनुअल समाधान शायद जाने का सबसे अच्छा तरीका हैं। लेकिन यह प्रोग्रामेटिक रूप से करने के लिए असंभव नहीं है।
सबसे पहले, आपको मॉड्यूल के शब्दकोश में मौजूद सभी नामों की एक सूची प्राप्त करने की आवश्यकता है जो कोड में उपयोग किए जा सकते हैं। मैं अपने कोड सीधे किसी भी दुंदर कार्यों फिर बुला नहीं है, आदि
संभालने हूँ, आप उन के माध्यम से पुनरावृति करने के लिए, पता लगाने के लिए जो मॉड्यूल प्रत्येक वस्तु के मूल रूप में परिभाषित किया गया था inspect.getmodule()
का उपयोग कर की जरूरत है। और मैं कर रहा हूँ यह मानते हुए कि आप किसी भी चीज का उपयोग नहीं कर रहे हैं जो दोगुनी from foo import *
-ed है।numpy
और scipy
मॉड्यूल में परिभाषित सभी नामों की एक सूची बनाएं।
अब आप उस आउटपुट को ले सकते हैं और प्रत्येक foo
को numpy.foo
के साथ प्रतिस्थापित कर सकते हैं।
इसलिए, यह एक साथ कुछ इस तरह डाल,:
for modname in sys.argv[1:]:
with open(modname + '.py') as srcfile:
src = srcfile.read()
src = src.replace('from numpy import *', 'import numpy')
src = src.replace('from scipy import *', 'import scipy')
mod = __import__(modname)
for name in dir(mod):
original_mod = inspect.getmodule(getattr(mod, name))
if original_mod.__name__ == 'numpy':
src = src.replace(name, 'numpy.'+name)
elif original_mod.__name__ == 'scipy':
src = src.replace(name, 'scipy.'+name)
with open(modname + '.tmp') as dstfile:
dstfile.write(src)
os.rename(modname + '.py', modname + '.bak')
os.rename(modname + '.tmp', modname + '.py')
हैं मान्यताओं के या तो गलत है, यह कोड को बदलने के लिए मुश्किल नहीं है। साथ ही, आप tempfile.NamedTemporaryFile
और अन्य सुधारों का उपयोग यह सुनिश्चित करने के लिए कर सकते हैं कि आप अस्थायी रूप से अस्थायी फ़ाइलों के साथ चीजों को ओवरराइट न करें। (मैं बस क्रॉस-प्लेटफार्म लिखने के सिरदर्द से निपटना नहीं चाहता था; यदि आप विंडोज़ पर नहीं चल रहे हैं, तो यह आसान है।) और कुछ त्रुटि प्रबंधन, जाहिर है, और शायद कुछ रिपोर्टिंग में जोड़ें।
मैं तुम्हारे लिए लग रहा है यहाँ कोड का विशेष रूप से दिलचस्प हिस्सा है। आशा है कि आपको कुछ अच्छा टूल मिल जाएगा। (+1) – NPE
इससे भी बेहतर, मुझे आशा है कि आप एक अच्छा टूल लिखेंगे (चाहे मेरे उत्तर पर आधारित हों या नहीं) और इसे पीपीपीआई पर प्रकाशित करें ताकि अगर मुझे कभी ऐसी चीज चाहिए तो मुझे इसे खुद करने की ज़रूरत नहीं है। :) – abarnert
यह प्रश्न भी देखें: [क्या मानक मॉड्यूल का उपयोग करने के लिए पाइथन * आयात को दोबारा करने के लिए कोई आईडीई/उपयोगिता है। मेम्बर सिंटैक्स?] (Http://stackoverflow.com/questions/12677061/is-there-an-ide- उपयोगिता-से-रिफैक्टर-पायथन-आयात-से-उपयोग-मानक-मॉड्यूल-memb) –