[解決済み] Python が私のモジュールを見つけられませんでした
質問
私はpythonのプロジェクト(私はvirtualenv内で実行する)を持っており、それは次の構造を持っています。
Project
├───.git
├───venv
└───src
├───__init__.py
├───mymodules
│ ├───__init__.py
│ ├───module1.py
│ └───module2.py
└───scripts
├───__init__.py
└───script.py
script.py
import src.mymodules.module1
...
venvを有効にした状態で、Projectディレクトリから以下のコマンドで実行しています。
(venv)$ python src/scripts/script.py
スクリプトは実行されますが、次のようなエラーが表示されて終了します。
Traceback (most recent call last):
File "src/scripts/script.py", line 1, in <module>
import src.mymodules.module1
ImportError: No module named src.mymodules.module1
pythonシェルを起動し、そこからモジュールをインポートしようとしましたが、エラーは出ませんでした。私はsrc内のすべてのディレクトリに_init__.pyを持っています。pythonは作業ディレクトリをsrc/scriptsとみなしているのでしょうか?なぜそうなるのでしょうか、また、そうであるならどうすれば src を作業ディレクトリにできますか?
解決方法を教えてください。
基本的には
script.py
のサブモジュールの一部であることを知らないのです。
src
という名前のモジュールがどこにあるのかも知りません。
src
があるかもしれません。これはpython2でも3でも同じです。
ご存知のように、Pythonはモジュールの検索を
sys.path
. モジュールをインポートするためには、そのモジュールが
sys.path
または、実行中のスクリプトと同じディレクトリにあります。
というときは
python src/scripts/script.py
,
sys.path
には
Project/src/scripts/
(なぜなら、そこに
script.py
が配置されている)、しかし
Project
. なぜなら
Project
がパスに入っていない場合、そのディレクトリにあるモジュール (
src
) をインポートすることができません。
これを解決するには
想定しているのは、あなたの
script.py
がエントリーポイントになり
src
モジュール(例えば、メインプログラムかもしれません)。もしそうであれば、それを修正するために
script.py
と同じレベルまで
src
:
Project
├───.git
├───venv
|───script.py <--- script.py moves up here
└───src
├───__init__.py
└───mymodules
├───__init__.py
├───module1.py
└───module2.py
こちらです。
script.py
の中にあるものを自由にインポートすることができます。
src
には何もありませんが
src
をインポートすることができます。
script.py
.
もしそうでなく、かつ
script.py
の一部です。
src
を使用すると、パイソンの
-m
を実行するための引数です。
script.py
の一部として
src
というように
$ python -m src.scripts.script
python にどのモジュールを実行しているかを伝えたからです (
src
) にあるため、パスに含まれることになります。だから
script.py
のサブモジュールであることを認識します。
src
からインポートすることができるようになります。
src
.
しかし、このような状況では注意が必要です。
src
インポート
src.scripts.script
.
この2つの方法の代わりとして、以下のように
sys.path
で直接
script.py
:
import sys
sys.path.insert(0, '/path/to/Project') # location of src
これはうまくいくのですが、通常、私の好みではありません。これは
script.py
がどのようにレイアウトされているかを正確に把握する必要があり、また、他の Python プログラムが
script.py
.
関連
-
Pythonコードの可読性を向上させるツール「pycodestyle」の使い方を詳しく解説します
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み】Pythonでgoogle APIのJSONコードを読み込むとエラーになる件
-
[解決済み] __init__.py でも「非パッケージで相対的なインポートを試みた」を修正する方法
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】典型的なテストディレクトリ構造でunittestを実行する
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ピロウズ画像色処理の具体的な活用方法
-
python implement mysql add delete check change サンプルコード
-
Python interpreted model libraryによる機械学習モデル出力の可視化 Shap
-
[解決済み】Python regex AttributeError: 'NoneType' オブジェクトに 'group' 属性がない。
-
[解決済み】なぜ「LinAlgError: Grangercausalitytestsから「Singular matrix」と表示されるのはなぜですか?
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】csv.Error:イテレータはバイトではなく文字列を返すべき
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない