pythonモジュールとImportError: xxx'という名前のモジュールがない問題
2022-02-22 12:27:35
pythonでは、各pyファイルをモジュールと呼び、__init__.pyファイルを持つ各ディレクトリをパッケージと呼びます。モジュールが
モジュールまたはパッケージが sys.path にある場合は、import module または import package を使って
使いたいモジュール(pyファイル)が現在のモジュールと同じディレクトリにある場合は、対応するファイル名をインポートするだけで、より
a.pyの中でb.pyを使用する場合。
インポートb
しかし、別のディレクトリにあるファイル(例えばb.py)をインポートしたい場合はどうすればいいでしょうか?
まず、b.py があるディレクトリを sys.path.append メソッドで検索ディレクトリに追加する必要があります。そして、インポートします。
例えば、次のようなことができます。
インポートシステムズ
sys.path.append('c:\xxxxb.py') # This example is for windows users
ほとんどの場合、上記のコードは問題なく動作します。しかし、もし上記のコードで何も問題がないのであれば、次のようにします。
なお、上記のコードでは、モジュールやパッケージの検索に失敗することがあります(ImportError: という名前のモジュールはありません。
xxxxxx)のためです。
sysモジュールはc言語で書かれているため、文字列は特殊文字を表す'˶'sn', '˶r', '˶t' などに対応しています。そのため
上記のコードは、次のように書くのが良いだろう。
sys.path.append('c:㊙㊙㊙.py')
または sys.path.append('c:/xxxx/b.py')
これにより、エスケープ文字の不正な構成による無効な検索ディレクトリ(sys.path)設定を回避することができます。
sys.path は python の search モジュール用のパスのセットで、リストです。
python環境ではsys.path.append(path)で関連するパスを追加することができますが Python 環境を終了した後
自分で追加したパスは自動的に消えます!
解決方法は以下の通りです。
1. PYTHONPATH環境変数を使用し、この環境変数に関連するパスを、異なるパスの間にカンマを使用して入力します。
(英語で!) 区切り、PYTHONPATH変数がまだ存在しない場合は作成しましょう!
ここで指定したパスは自動的に sys.path に追加され、永久に sys.path に存在し、異なるバージョンの python で利用可能です。
同じように便利なはずです。
C:\UsersAdministrator╱Desktop╱testmodule1.py:
def func1():
print("func1")
module1 を直接 import するために C:\UsersAdministrator⇄Desktop⇄test を PYTHONPATH に追加して、次のようにします。
module1.func1() を呼び出すだけです。
2. 作成したpyファイルをsite_packagesディレクトリに配置します。
3. pth ファイルを使って、site-packages ファイル内に .pth ファイルを作成し、そこにモジュールのパスを一行ずつ記述します。
以下は、コメントも使用できるpthファイルの例です。
# 私のプロジェクト用の .pth ファイル(この行はコメントです)、ファイル名は xxx.pth です。
C:\UsersAdministrator﹑Desktop﹑test
この方法は悪くないのですが、管理上の問題があり、異なるpythonのバージョンで共有することができません。
4. 呼び出しファイルに sys.path.append("module file directory")を追加します。
5. 5. モジュールファイルを $python_dir/Lib ディレクトリに直接コピーします。
モジュールまたはパッケージが sys.path にある場合は、import module または import package を使って
使いたいモジュール(pyファイル)が現在のモジュールと同じディレクトリにある場合は、対応するファイル名をインポートするだけで、より
a.pyの中でb.pyを使用する場合。
インポートb
しかし、別のディレクトリにあるファイル(例えばb.py)をインポートしたい場合はどうすればいいでしょうか?
まず、b.py があるディレクトリを sys.path.append メソッドで検索ディレクトリに追加する必要があります。そして、インポートします。
例えば、次のようなことができます。
インポートシステムズ
sys.path.append('c:\xxxxb.py') # This example is for windows users
ほとんどの場合、上記のコードは問題なく動作します。しかし、もし上記のコードで何も問題がないのであれば、次のようにします。
なお、上記のコードでは、モジュールやパッケージの検索に失敗することがあります(ImportError: という名前のモジュールはありません。
xxxxxx)のためです。
sysモジュールはc言語で書かれているため、文字列は特殊文字を表す'˶'sn', '˶r', '˶t' などに対応しています。そのため
上記のコードは、次のように書くのが良いだろう。
sys.path.append('c:㊙㊙㊙.py')
または sys.path.append('c:/xxxx/b.py')
これにより、エスケープ文字の不正な構成による無効な検索ディレクトリ(sys.path)設定を回避することができます。
sys.path は python の search モジュール用のパスのセットで、リストです。
python環境ではsys.path.append(path)で関連するパスを追加することができますが Python 環境を終了した後
自分で追加したパスは自動的に消えます!
<スパン 3、検索パスとパス検索
モジュールのインポートには、"パスサーチ"と呼ばれる処理が必要です。
パスの検索: ディレクトリの集合を見つける
<スパン パス検索:ファイルを探す動作
ImportError: No module named myModule
このエラーには このモジュールは 検索パス を引き起こす パス検索 は失敗します!
モジュールをサフィックス名なしでインポートする(例: .py
Pythonはモジュールへのパスを検索します。
1)、プログラムのホームディレクトリ
2), PTYHONPATHディレクトリ(設定されている場合)
3), 標準接続ライブラリディレクトリ (通常 /usr/local/lib/python2.X/ にあります)
4), 任意の .pth ファイルの内容 (存在する場合)。モジュール検索パスにエフェクトのあるディレクトリを追加できる新機能を搭載
.pthサフィックス・テキストファイル内のディレクトリを行単位でリストアップ。
これら4つのグループを組み合わせて、sys.pathが作られます。
>>> import sys
>>> sys.path
When importing, Python will automatically search each directory in this list from left to right.
解決方法は以下の通りです。
1. PYTHONPATH環境変数を使用し、この環境変数に関連するパスを、異なるパスの間にカンマを使用して入力します。
(英語で!) 区切り、PYTHONPATH変数がまだ存在しない場合は作成しましょう!
ここで指定したパスは自動的に sys.path に追加され、永久に sys.path に存在し、異なるバージョンの python で利用可能です。
同じように便利なはずです。
C:\UsersAdministrator╱Desktop╱testmodule1.py:
def func1():
print("func1")
module1 を直接 import するために C:\UsersAdministrator⇄Desktop⇄test を PYTHONPATH に追加して、次のようにします。
module1.func1() を呼び出すだけです。
2. 作成したpyファイルをsite_packagesディレクトリに配置します。
3. pth ファイルを使って、site-packages ファイル内に .pth ファイルを作成し、そこにモジュールのパスを一行ずつ記述します。
以下は、コメントも使用できるpthファイルの例です。
# 私のプロジェクト用の .pth ファイル(この行はコメントです)、ファイル名は xxx.pth です。
C:\UsersAdministrator﹑Desktop﹑test
この方法は悪くないのですが、管理上の問題があり、異なるpythonのバージョンで共有することができません。
4. 呼び出しファイルに sys.path.append("module file directory")を追加します。
5. 5. モジュールファイルを $python_dir/Lib ディレクトリに直接コピーします。
以上の5つの方法で、import module_name を直接使用することができるようになります。
<スパン 参考記事 http://my.oschina.net/leejun2005/blog/109679
関連
-
Python_matplotlib の凡例は外側に保存すると不完全になる
-
python3 failed to start Fatal Python error: initfsencoding: unable to load file system codec
-
IDLEのサブプロセスが接続されない場合の解決策 - fishcフォーラムより
-
ImportError: Windows の Django でプロジェクトを作成するとき、django.core solution という名前のモジュールがない。
-
PythonのエラーNo module named 'pkg_resources' を解決する。
-
pythonフレームワーク Scrapyエラー TypeError: 'float' object is not iterable Solve
-
pipenvとpyenvによる複数の独立したPython仮想開発環境の管理
-
Pythonを学んだ後、このまとめを整理するために夜更かしすることに...。
-
tkinter モジュールを使った Python 倉庫番ゲーム
-
Python Numpy.ndarray ValueError: 代入先が読み取り専用です。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Error: cannot run program--createprocess error=2,The system cannot find specified file.
-
from scipy.interpolate import spline errorImportError: cannot import name 'spline'.
-
ImportError: 名前のインポートができない imsave エラー
-
PyChamの「AttributeError:module 'pip' has no attribute 'main'」エラー解決法
-
Python pipを使ったpymysqlモジュールのインストール (Error: ImportError: No module named pymysql)
-
Python|ModuleNotFoundErrorを解決する。utils' という名前のモジュールがありません。
-
TypeError: 'numpy.ndarray' オブジェクトが呼び出し可能でないエラー処理
-
エラーの原因の1つ: 'encoding'はこの関数の無効なキーワード引数です。
-
Python プロンプト。TypeError: 'NoneType' オブジェクトは呼び出し可能なソリューションではありません。
-
Anaconda 詳細インストールおよび使用チュートリアル(画像付き)