2013-04-18 2 views
6

मान लीजिए कि मेरे पास mymodule नामक एक पायथन मॉड्यूल है। मैं, कई फाइलों में mymodule.py विभाजित करने के लिए चाहते हैं, जबकि अभी भी एक एकल मॉड्यूल के रूप में परिभाषित किया जा रहा,पायथन: कई फ़ाइलों द्वारा मॉड्यूल को परिभाषित करें

import mymodule 
reload(mymodule) 

मेरी निर्देशिका संरचना जहां

/dir/mymodule.py 

है हालांकि: मेरे कोड के शीर्ष पर, मैं इस राशि (यानी मैं प्रत्येक फाइल को अलग से आयात नहीं करना चाहता - मैं पहले के रूप में अपने आयात/पुनः लोड का उपयोग करने में सक्षम होना चाहता हूं)।

एक ही रास्ता मैं ऐसा करने के तरीके पता निम्नलिखित

/dir/mymodule/ 
      file1.py 
      file2.py 
      __init__.py 

जहां __init__.py शामिल

from file1 import * 
from file2 import * 

यह ज्यादातर काम करता है, लेकिन reload(mymodule) करने के लिए अपने कॉल उसके बाद, क्योंकि यह नहीं करता है, कुछ भी करता है * आयात के माध्यम से कुछ भी पुनः लोड नहीं किया जाएगा।

कोई सुझाव?

+1

मैं भी इसका उत्तर जानना चाहता हूं। इस वांछित पैटर्न का कारण क्या है? – BlackVegetable

+1

आपको मॉड्यूल आयात करने की आवश्यकता क्यों है और फिर इसे एक बार फिर से लोड करें? – Ixanezis

+0

जिज्ञासा से बाहर, आपका कोड इस तरह क्यों संरचित है? – Blender

उत्तर

1

मुझे यकीन नहीं है कि आप यह क्यों कर रहे हैं, लेकिन आपको लगता है कि आपके पास कारण हैं। मैं इस काम करता है लगता है:

__init__.py:

import file1 
reload(file1) 
from file1 import * 

जाहिर है आप करें 2 आयात कर सकते हैं और साथ ही

+0

कृपया '__init __। py' के आस-पास बैकटीक्स जोड़ने के लिए अपनी पोस्ट संपादित करें ... अभी यह बोल्ड में दिखा रहा है। मैं इसे संपादित नहीं कर सकता क्योंकि यह चाहता है कि मैं 6 अक्षरों को बदलूं, लेकिन बैकटीक्स केवल दो अक्षर हैं। – SethMMorton

+0

डेविड ने मेरे लिए यह अच्छी तरह से किया। – thebigdog

+0

क्या आप समझा सकते हैं कि आप इसका समर्थन क्यों नहीं करते? एक बहुत अच्छा कामकाज की तरह लगता है। – rottweiler

1

एक त्वरित समाधान का के लिए मैं

import sys 

def myreload(base_module_name): 
    for module_name, module in sys.modules.items(): 
     if module_name.startswith(base_module_name): 
      reload(module) 

myreload('mymodule') 

का सुझाव सकता है यह कहेंगे reload(mymodule.file1), reload(mymodule.file2) आदि

हालांकि, यह रिकर्सिव नहीं है और जैसा कि आप ipython का उपयोग कर रहे हैं, मुझे विश्वास है कि आपके quiestion अच्छी तरह से here का उत्तर दिया गया है।

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