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 में नामित WonderfulThing में वर्ग जिसका मैं 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

Popular posts from this blog

MySql variables and php -

url rewriting - How to implement the returnurl like SO in PHP? -

Which Python client library should I use for CouchdB? -