問題タブ [cookiecutter]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python-3.x - テストするモジュールをテスト モジュールにインポートする方法
問題
この cookiecutter テンプレートで作成されたので、Python パッケージの標準に従うプロジェクトのディレクトリ構造があります: https://github.com/audreyr/cookiecutter-pypackage#quickstart
ディレクトリ構造は
の最初のコード行test_module1.py
は次のとおりです。
しかし、私はModuleNotFoundError: No module named 'project_name'
.
私の理解では、呼び出されたフォルダーproject_name
はパッケージであり、__init__.py
ファイルの存在によって保証されるため、これは機能するはずです。
このようなインポートがどのように機能するかを理解するのにいつも苦労しました。私のプロジェクトでは、テストするモジュールと同じフォルダーにテストを配置することにいつも落ち着きました。これが悪い習慣であることはわかっていますが、モジュールを実際にインポートできる唯一の方法です。
私がすでに試したこと
__init__.py
親フォルダーと子フォルダーの両方の名前がproject_name
. これは機能しませんでした。同じエラーです。
__init.py__
また、Cookiecutter テンプレートにはそれがありませんが、その中にファイルを作成してテスト フォルダーをパッケージにしようとしました。多くの場所で、テスト フォルダーをパッケージにすることはお勧めできませんが、その構造を提案する人もいます。それもうまくいきませんでした。
この一見非常に標準的な問題の解決策を徹底的に検索しました。リンクの一部は次のとおりです。
- Python、テスト用のモジュールのインポート
- https://gist.github.com/tasdikrahman/2bdb3fb31136a3768fac
- 親フォルダーからのモジュールのインポート
- https://alex.dzyoba.com/blog/python-import/
- 兄弟パッケージのインポート
- ノーズを使用したテスト用の Python インポート - 現在のパッケージより上のモジュールをインポートするためのベスト プラクティスは何ですか
私の最後の試みは、Cookiecutter でプロジェクトを開始することでした。そのため、最初からすべてが適切にセットアップされます。しかし、私はまだModuleNotFoundError
.
欲しくないもの
sys.path
多くの回答が示唆しているように、私は変更したくありません。このような一般的な問題には、よりクリーンな方法が必要です。
私は何を間違っていますか?
いくつかの追加情報を編集します (@Nicholas からの質問を参照):
の内容は__init__.py
、
これは Cookiecutter テンプレートによって生成されました。
の中で、発生するtest_module1
前に次を追加しました。ModuleNotFoundError
sys.path
最初の要素がtests
ディレクトリであるリストを出力します。
最初の要素の小文字の「c」が重要かどうかはわかりません。
os.getcwd()
ルートディレクトリを出力し'c:\Users\....\project_name'
ます。小文字の「c」も。