How do I make these relative imports work in Python 3? -
मेरे पास निर्देशिका संरचना है जो इस तरह दिखती है:
project / __init__.py foo / __init.py__ पहले / सेकंड /
में project / foo / __ init __। Py
मैं पहले वर्गों को आयात करता हूँ .py
, दूसरा नाम
और third.py
और उन्हें __ सभी __
में डाल दिया है।
एक first.py
में नामित second.py
में उपयोग करना चाहता हूं, और आयात करने से आयात करना चाहते हैं *
से foo
। (यह इस प्रश्न के दायरे से बाहर है कि मैं ऐसा क्यों करना चाहता हूं, मान लें कि मेरे पास एक अच्छा कारण है।)
में द्वितीयक
मैंने कोशिश की है .foo आयात से *
, फ़ू आयात * से
और से। आयात *
और इन मामलों में से कोई भी अदभुत सेटिंग नहीं है
आयातित मैंने से ..foo import *
की कोशिश की, जो एक त्रुटि उठाती है "सेवलिपल पैकेज से परे सापेक्ष आयात का प्रयास किया"।
मैंने दस्तावेज़ और पीईपी पढ़ा है, और मैं कर सकता हूँ यह काम करने के लिए तैयार नहीं है I किसी भी सहायता की सराहना की जाएगी।
स्पष्टीकरण / संपादित करें: ऐसा लगता है कि मैं संकुल में जिस तरह से लेकिन डॉक्स को फिर से देखकर ऐसा लगता है कि संपादित करें: एक गैर-वाइल्डकार्ड आयात विफल हो गया है, जो कुछ भी शामिल करने का कोई तरीका नहीं है। ( __ सभी __ काम करता है गलतफहमी हो सकती है। मैं इसे मॉड्यूल के समान ही इस्तेमाल कर रहा था,
से पहले आयात करें अद्भुत टिंग __all__ = ["अद्भुत टिंग"]
__ सभी __
का उपयोग डिफ़ॉल्ट रूप से आयात किए जाने वाले मॉड्यूल के नामों को निर्दिष्ट करने के लिए ही किया जा सकता है; नाम का आयात नहीं किया जा सकता है WonderfulThing
) से कोशिश कर रहा है आयात करें foo
असफल रहा, लेकिन आयात करें foo
काम करता है दुर्भाग्य से, दिर (एफू)
कुछ भी नहीं दिखाता है।
संपादित करें: मैंने गलत किया प्रश्न: नहीं __ सभी __
सिर्फ मॉड्यूल के लिए प्रतिबंधित नहीं है।
एक सवाल यह है कि आप एक सापेक्ष आयात करना क्यों चाहते हैं से project.foo import *
करने में कुछ भी गलत नहीं है, यहां। दूसरे, __ सभी __
फ़ू पर प्रतिबंध आपको करने से नहीं रोक सकता project.foo.first आयात WonderfulThing
, या सिर्फ से पहले आयात करें WonderfulThing
, जो अभी भी सबसे अच्छा तरीका होगा।
और अगर आप वास्तव में बहुत सी चीजों को आयात करना चाहते हैं, तो संभव है कि को परियोजना आयात करें
से करें, और उसके बाद उपयोग करें foo.WonderfulThing
के साथ एक import *
करने के बजाय और WonderfulThing
का उपयोग करके सीधे
हालांकि आपके सीधा जवाब देने के लिए प्रश्न, second.py में __ init __
फ़ाइल से आयात करने के लिए आप ऐसा करते हैं:
से। आयात करें वंडरफुलिंग
या
से आयात *
Comments
Post a Comment