pythonパッケージでソースを整理する方法について支援が必要です。その方法については、すでにWeb上のいくつかのチュートリアル(特に これ )に従っています)、説明したように、そして私がそれをどのように想像したかは機能しません。
python binaryio
という名前のパッケージを作成します。ユーザーができるようにしたいBinaryReader
およびBinaryWriter
という名前の2つのクラスを提供する必要がありますインポートする
from binaryio import BinaryReader
from binaryio import BinaryWriter
したがって、次のようにリポジトリとパッケージのディレクトリ構造を作成しました。
BinaryReader
クラスを含む)BinaryWriter
クラスを含む)setuptools.setup
呼び出し)ご覧のように、クラスは別のファイルにあります(これはC#のバックグラウンドからのものです)。モジュールがPython=の「ユニット」であるため、これが良いアイデアかどうかはわかりませんが、それ以外の場合、すべてのクラスを1つの巨大なファイルにまとめることは、私には論理的に思えませんでした。
__ init __。pyは、これらのクラスをインポートするために次のようになり、(私が理解しているように)from binaryio import BinaryReader
後でユーザーがインポートできる:
from binaryreader import BinaryReader
from binarywriter import BinaryWriter
ただし、パッケージをローカルにインストールし(正常に動作するようです)、import binaryio
、次のエラーが発生します。
>>> import binaryio
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\Projects\Git\binaryio\binaryio\__init__.py", line 1, in <module>
from binaryreader import BinaryReader
ModuleNotFoundError: No module named 'binaryreader'
どうやら、__ init __。pyファイルに問題があります。 binaryreader.pyファイル別名モジュールが上記のように同じフォルダーに存在するので、私はこれを理解していません。おかしなことに、my IDE(PyCharm、パッケージルートをソースフォルダとして設定している)はその中のステートメントについて文句を言わず、すべての参照を解決できます。
ここで何が悪いのですか?上記のリンク先のチュートリアルによると、Abc
という名前のクラスでファイルをxyz.pyに入れてから、from xyz import Abc
into__ init __。pyは機能するはずですが、明らかに私には機能しません。
コードはPython 2.xでは機能しますが、3.xでは機能しません。相対インポートの構文が異なるためです。ドットがない場合、Python 2.xはモジュールルートのモジュールand現在のパッケージ、およびPython 3.xはモジュールルートのonlyを検索します。
使用するインポートステートメントは次のとおりです。
from binaryio.binaryreader import BinaryReader
from binaryio.binarywriter import BinaryWriter
Python 2.xと3.xの両方で機能し、「将来」はありません。
私はあなたのインポートステートメントにドットを追加する必要があると思います:
from .binaryreader import BinaryReader
from .binarywriter import BinaryWriter