は私がディスク上に次のような構造を持つパッケージを開発しています:Pythonパッケージの標準ライブラリパッケージ名で名前空間の競合を解決するにはどうすればよいですか?
foo/
__init__.py
xml.py
bar.py
moo.py
xml.py
パッケージには、SAXストリームパーサを使用して、他のパッケージコンポーネントのためのいくつかのカスタムXML解析および翻訳を行うクラスを提供します。
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
を私は名前空間の競合を持っているように見えます。 xml.py
の名前をxmlparser.py
のように変更すると、すべてが正常に動作します。しかし、これは間違ったことのように感じます。私はPythonのパッケージ名と解像度に関する根本的なものをここで失っているように感じます。
foo/xml.py
ファイルの名前を変更することなくこの作業を行う適切な方法はありますか?それとも、本当に矛盾する名前の唯一の解決策ですか?
編集:「標準のPythonモジュールと同じ名前を付けないようにする」と思われます。これは、時間の経過とともに変化し、成長する標準的なモジュールセットである動く標的です。だから本当にあなたの名前でクリエイティブを取得しない限り、名前を変更するまでのあなたの発見 - 何かの矛盾の解決策は私には貧しいようです。また、foo
というユニークなパッケージ名を既に持っています(私はfoo
を使用していませんが、それは確かにユニークなものです)。
問題は、「xml.sax」が* my *パッケージに含まれていないことです。したがって、それを相対的にインポートすることはできません。それが実際に私が今失敗している理由です。 Pythonは、 'xml.sax'が私の' foo.xml'パッケージとの相対的なものであると考えていますが、そうではありません。 –
それはまさに私が後にしたものでした。ありがとう! –