मैं डिस्क पर निम्नलिखित संरचना के साथ एक पैकेज के विकास कर रहा हूँ:मैं मानक लाइब्रेरी पैकेज नामों के साथ अपने पायथन पैकेज में नेमस्पेस विवादों को कैसे हल करूं?
foo/
__init__.py
xml.py
bar.py
moo.py
xml.py
पैकेज एक वर्ग है कि कुछ कस्टम XML पार्सिंग और एक SAX धारा पार्सर का उपयोग अन्य पैकेज घटकों के लिए अनुवाद करता है प्रदान करता है। तो यह उस में है:
import xml.sax
import xml.sax.handler
लेकिन मैं मिलता है जब मैं एक आवेदन पत्र में उपयोग करने के लिए जाना:
Traceback (most recent call last):
File "testxmlparser.py", line 15, in <module>
import foo.xml
File "~/code/foo/xml.py", line 39, in <module>
import xml.sax
ImportError: No module named sax
मैं एक namespace संघर्ष दिखाई देते हैं। अगर मैं xml.py
का नाम बदलता हूं तो xmlparser.py
जैसे कुछ और उम्मीद के अनुसार काम करता है। लेकिन यह गलत काम करने की तरह लगता है। मुझे लगता है कि मुझे यहां पाइथन में पैकेज नामों और संकल्प के बारे में कुछ मौलिक याद आ रही है।
क्या इस काम को करने का कोई उचित तरीका है जिसमें मुझे foo/xml.py
फ़ाइल का नाम बदलने में शामिल नहीं है? या यह वास्तव में विरोधाभासी नामों का एकमात्र समाधान है?
संपादित करें: "मानक पायथन मॉड्यूल के समान चीजों को नाम देने से बचें" लगता है ... अच्छा .. मेरे लिए माइनेफ्ट। यह एक चलती लक्ष्य है, मानक मॉड्यूल सेट, जो समय के साथ बदलना और बढ़ना है। तो जब तक आपको वास्तव में आपके नामों के साथ क्रिएटिव-चीजें-तक-आप-खोज-कुछ-नहीं-विरोधी-संघर्ष समाधान मेरे लिए खराब नहीं लगता है। इसके अलावा, मुझे इसे पहले से ही foo
के साथ एक अद्वितीय पैकेज नाम में मिला है (मैं foo
का उपयोग नहीं कर रहा हूं, लेकिन कुछ निश्चित रूप से अद्वितीय है), क्या यह पर्याप्त नहीं होना चाहिए?
समस्या है * xml.sax' * मेरे * पैकेज में नहीं है। तो इसका एक सापेक्ष आयात काम नहीं करता है। यही कारण है कि यह अभी मेरे लिए असफल रहा है। पायथन को 'xml.sax' को मेरे 'foo.xml' पैकेज के सापेक्ष होने की उम्मीद है, लेकिन ऐसा नहीं है। –
वही था जो मैं बाद में था। धन्यवाद! –