1. ホーム
  2. パイソン

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 環境を終了した後
自分で追加したパスは自動的に消えます!

<スパン 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.










<スパン PythonのImportErrorについての質問です。xxx'という名前のモジュールはないのですか?
解決方法は以下の通りです。
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