2014-04-09 11 views
5
pkg/ 
    __init__.py 
    foo.py 
    bar.py 
    baz.py 

मेरे पास मॉड्यूल आयात का एक समूह है जो foo.py, bar.py, और baz.py भर में समान है।एक पायथन पैकेज में आयात करना

क्या कोई तरीका है कि मैं __init__.py में आयात कर सकता हूं? मुझे foo.py में क्या लिखना होगा?

उत्तर

1

__init__.py में आयात रखने का एक बुरा विचार होगा; __init__.py आपके मॉड्यूल ऑब्जेक्ट की सामग्री के रूप में उपयोग किया जाता है, इसलिए यह एक सार्वजनिक इंटरफ़ेस है। इसके अलावा, __init_.py प्रारंभ में आयात किया जाता है जब आपका पैकेज आयात किया जाता है, जबकि आपको वास्तव में तब तक आयात की आवश्यकता नहीं होती जब तक कि आपके submodules की आवश्यकता न हो।

सबसे अच्छा तरीका एक आंतरिक विस्तार मॉड्यूल में सामान्य कोड डालना है, जिसे एक प्रारंभिक अंडरस्कोर (जिसका अर्थ है "निजी"), उदा। _imports.py, फिर आपकी अन्य फाइलों में from ._imports import * लिखें।

1

आपने यह करने का सही तरीका अनुमान लगाया है, लेकिन मैं इसे थोड़ा और औपचारिक बना सकता हूं और आपको कहीं और मिले किसी अपेक्षा से स्पष्ट व्याख्या दे सकता हूं। यदि आप आयात को मॉड्यूलर करना चाहते हैं, जो आपके कोडिंग दर्शन के आधार पर स्वयं में और स्वयं (पारदर्शिता बनाम कोड पुन: उपयोग) का अच्छा या बुरा विचार हो सकता है, चाहे आयात __init__.py में हो या नहीं, आप अपने आयात को किसी अन्य स्क्रिप्ट से आयात कर सकते हैं। उदाहरण के लिए: हालांकि

# To import form __init__ 
from . import * 

नोट करना महत्वपूर्ण है कि:

"""import_scripts.py""" 
import numpy as np 
import scipy as sp 
... 

"""actual_code.py""" 
from import_scripts import * 
# np and sp are now in scope 

__init__.py से आयात ज्यादातर एक ही है, तो आप सिर्फ पारंपरिक रूप से एक रिश्तेदार आयात के बजाय यदि आप इसे एक ही मॉड्यूल से एक्सेस कर रहे हैं का उपयोग करें इस प्रकार के आयात केवल तभी काम करेंगे यदि आप स्क्रिप्ट के बजाए इन पायथन स्क्रिप्ट को मॉड्यूल के रूप में स्पष्ट रूप से चलाते हैं। इसका मतलब यह है:

python -m foo 
बजाय

python foo.py 

महत्वपूर्ण है, लेकिन सूक्ष्म भेद।

उम्मीद है कि मदद करता है। यदि आपको और प्रश्न पूछने हों तो मुझे बता दें।

+0

+1 सूक्ष्म भेद के लिए धन्यवाद! – ksindi

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