問題タブ [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.

0 投票する
1 に答える
1765 参照

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 テンプレートにはそれがありませんが、その中にファイルを作成してテスト フォルダーをパッケージにしようとしました。多くの場所で、テスト フォルダーをパッケージにすることはお勧めできませんが、その構造を提案する人もいます。それもうまくいきませんでした。

この一見非常に標準的な問題の解決策を徹底的に検索しました。リンクの一部は次のとおりです。

私の最後の試みは、Cookiecutter でプロジェクトを開始することでした。そのため、最初からすべてが適切にセットアップされます。しかし、私はまだModuleNotFoundError.

欲しくないもの

sys.path多くの回答が示唆しているように、私は変更したくありません。このような一般的な問題には、よりクリーンな方法が必要です。

私は何を間違っていますか?

いくつかの追加情報を編集します (@Nicholas からの質問を参照):

の内容は__init__.py

これは Cookiecutter テンプレートによって生成されました。

の中で、発生するtest_module1前に次を追加しました。ModuleNotFoundError

sys.path最初の要素がtestsディレクトリであるリストを出力します。

最初の要素の小文字の「c」が重要かどうかはわかりません。

os.getcwd()ルートディレクトリを出力し'c:\Users\....\project_name'ます。小文字の「c」も。