1

ModuleNotFoundErrorPython 3.8.x の実行

それぞれ詳細なテストを含むクラスと関数を含む python パッケージを作成しています。パッケージ内では、これらのビルディング ブロックを使用して、これらのファイルの先頭にある絶対インポートを使用してエンド ツー エンドの使用法と例を提供しようとしています (私のテストのように)。

プロジェクトの構造は次のとおりです。

.
├── __init__.py
├── setup.py
├── examples
│   ├── __init__.py
│   └── end_to_end_1.py
├── tests
│   ├── __init__.py
│   └── utils
│       ├── __init__.py
│       ├── test_useful_one.py
│       └── test_useful_two.py
└── utils
    ├── __init__.py
    ├── useful_one.py
    └── useful_two.py

を使用してパッケージルートからすべてのテストを実行していますpython -m unittest tests/**/*.pyが、両方のテストファイルには、次utilsのような絶対パッケージのインポートが含まれています。

from utils.useful_one import UsefulClass

このアプローチは、テストの実行とUsefulClassクラスのテスト ファイルへのインポートに成功しています。

examples/end_to_end_1.pyモジュール内で同じインポートステートメントを使用しようとし、(パッケージのルートから) ファイルを実行しようとすると、私の問題が発生します。

python examples/end_to_end_1.py

今、私は runtime を取得しますModuleNotFoundError: No module named 'utils'

Python言語のガイドラインに従おうとして、可能な場合は絶対インポートを使用しようとしていますが、役に立ちません。

__init__.pyファイルがランタイムにパッケージを解決する場所を伝える方法を完全に誤解しています。node パッケージや ruby​​ gem 内でいつも同じパターンを目にするので、このユースケースは異常ではないと思います。

その場しのぎの(一時的な)解決策

現時点では、これを解決するために絶対インポートの結果からのソリューションを ModuleNotFoundErrorに適用しました。これは機能しているにもかかわらず、リポジトリが公開されている場合はあまりスケーラブルではないようで、Python エコシステムにはこの問題の解決策があるように感じます。レイモンド・ヘッティンガーが言うように..

もっと良い方法があるはずです!

4

0 に答える 0