私はこのようになりますPythonライブラリ(ない鉱山)に取り組んでいます:インポートが副作用をもたらすライブラリをPythonでパッケージ化するには?
.
├── README.md
├── setup.py
└── library
├── __init__.py
├── core.py
├── a.py
└── b.py
自体がa.py
とb.py
使用core.py
のファイル__init__.py
メイク使用。注目すべき重要なことは、import library
に意図的に意図されているいくつかの面倒があることです。
しかし、私はユーザに副作用なしでcore.py
の機能を使用する可能性を与えたいと思います。残念ながら、ご存知のように、import library.core
またはfrom library import core
は、とにかく(副作用が発生する)__init__.py
を実行します。
この問題を解決するために私のパッケージとsetup.py
をどのように再編成できますか?
私はこのような何かを考えた:私はpackages = ['library', 'library_core']
とsetup.py
を更新してしまう
.
├── README.md
├── setup.py
├── library_core
│ ├── __init__.py
│ ├── core.py
│ ├── a.py
│ └── b.py
└── library
└── __init__.py # Import library_core and apply side effects
。こうすると、library
をインポートしても何も変更されませんが、ユーザーは副作用なしでlibrary_core
をインポートできます。また、これはコードの複製を避け、すべてが同じリポジトリにとどまるでしょう。
残念ながら、library_core
をlibrary
からインポートする機能がファイルツリーの同じ場所にないため、この機能は動作しません。
:
そして
setup.py
中:ファイルツリーはこのようになります。 * - あなたの主な問題ですが、 'library/__ init __。py'で' library_core import core'を実行しようとするとどうなりますか? – Kos
@Kos実際には、これはうまくいくかもしれません...私は 'from ..'import library_core'はパッケージが' python setup.py install'でインストールされた後**動作します。私はこれが行く方法だと思います。だから私はその質問を空白にします。 – Delgan