561

Python はローカル ディレクトリにインストールされます。

私のディレクトリツリーは次のようになります。

(local directory)/site-packages/toolkit/interface.py

私のコードはここにあります:

(local directory)/site-packages/toolkit/examples/mountain.py

この例を実行するにはpython mountain.py、次のコードを記述します。

from toolkit.interface import interface

そして、私はエラーが発生します:

Traceback (most recent call last):
  File "mountain.py", line 28, in ?
    from toolkit.interface import interface
ImportError: No module named toolkit.interface

私はすでにチェックしてsys.pathおり、そこにディレクトリがあり/site-packagesます。また、__init__.py.binこれがパッケージであることを Python に示すために、toolkit フォルダーにファイルがあります。__init__.py.binサンプルディレクトリにもあります。

にあるときに Python がファイルを見つけられない理由がわかりませんsys.path。何か案は?パーミッションの問題でしょうか? 実行許可が必要ですか?

4

33 に答える 33

310

orip の投稿へのコメントに基づいて、これが起こったことだと思います。

  1. __init__.pyWindowsで編集しました。
  2. Windows エディターは、おそらくキャリッジ リターン (Windows では行末は CR/LF、UNIX では LF のみ)、または CTRL-Z (Windows ではファイルの終わり) など、印刷されないものを追加しました。
  3. WinSCP を使用してファイルを UNIX ボックスにコピーしました。
  4. WinSCP は次のように考えました:「これには基本的なテキストではないものがあります。バイナリ データを示すために .bin 拡張子を付けます。」
  5. 欠落__init__.py(現在は と呼ばれ__init__.py.binています) は、python がツールキットをパッケージとして認識していないことを意味します。
  6. __init__.py適切なディレクトリに作成すると、すべてが機能します... ?
于 2008-12-04T00:17:40.203 に答える
86

する

(local directory)/site-packages/toolkit

を持ってい__init__.pyますか?

ディレクトリをインポートするには、すべてのディレクトリに__init__.pyファイルが必要です。

于 2008-12-03T21:50:15.477 に答える
42

*nix では、PYTHONPATH が正しく構成されていること、特に次の形式であることも確認してください。

 .:/usr/local/lib/python

(.:現在のディレクトリも検索できるように、先頭に注意してください。)

バージョンによっては、他の場所にある場合もあります。

 .:/usr/lib/python
 .:/usr/lib/python2.6
 .:/usr/lib/python2.7 and etc.
于 2011-03-04T21:14:56.640 に答える
24

(JetBrains スイートの一部) を使用しPyCharmて、スクリプト ディレクトリをソースとして定義する必要があります。
Right Click > Mark Directory as > Sources Root

于 2017-01-04T17:53:35.573 に答える
23

私は自分の問題を解決しました。間違っていたことと解決策の要約を書きます。

ファイルは正確に呼び出す必要があります__init__.py。私の場合のように拡張子が異なる場合.py.bin、Pythonはディレクトリを移動できず、モジュールを見つけることができません。ファイルを編集するには、 vinanoなどの Linux エディターを使用する必要があります。Windows エディタを使用すると、隠し文字がいくつか書き込まれます。

それに影響を与えていた別の問題は、ルートによって別のバージョンの Python がインストールされていたことです。そのため、誰かが Python のローカル インストールで作業している場合は、プログラムを実行している Python インストールがローカル Python であることを確認してください。これを確認するにwhich pythonは、実行して、実行可能ファイルがローカル ディレクトリにあるかどうかを確認します。そうでない場合は、パスを変更しますが、ローカルの Python ディレクトリが他の Python ディレクトリよりも前にあることを確認してください。

于 2008-12-04T01:11:08.473 に答える
18

ディレクトリをパッケージとしてマークするには、という名前のファイルが必要ですが、__init__.pyこれは役に立ちますか?

于 2008-12-03T21:31:53.267 に答える
5

私の2セント:

ここに画像の説明を入力

つば:

Traceback (most recent call last):
      File "bash\bash.py", line 454, in main
        import bosh
      File "Wrye Bash Launcher.pyw", line 63, in load_module
        mod = imp.load_source(fullname,filename+ext,fp)
      File "bash\bosh.py", line 69, in <module>
        from game.oblivion.RecordGroups import MobWorlds, MobDials, MobICells, \
    ImportError: No module named RecordGroups

これは私を混乱させました-醜いsyspathハックを示唆する投稿や投稿を調べました(ご覧のとおり、私__init__.pyのすべてがそこにありました)。game/oblivion.py と game/oblivion は、かなり役に立たない "No module named RecordGroups" を吐き出す python を混乱させていたことがわかりました。この(同じ名前の)動作を文書化した回避策やリンクに興味があります -> EDIT (2017.01.24) - What If I Have a Module and a Package With The Same Name? を見てください。興味深いことに、通常はパッケージが優先されますが、ランチャーはこれに違反しているようです。

編集 ( 2015.01.17 ):ここで分析されたカスタム ランチャーを使用することについては言及していません。

于 2014-09-06T11:17:22.883 に答える
4

書き込みによって私の問題を修正print (sys.path)し、クリーン インストールにもかかわらず Python が古いパッケージを使用していることを発見しました。これらの作成された python を削除すると、正しいパッケージが自動的に使用されます。

于 2016-07-21T18:51:03.467 に答える
4

上記のすべての方法を試しても失敗した場合は、モジュールが組み込みモジュールと同じ名前である可能性があります。または、モジュールよりも優先度の高いフォルダーに存在する同じ名前sys.pathのモジュール。

デバッグするには、from foo.bar import baz苦情を言ってくださいImportError: No module named bar。に変更するとimport foo; print foo、 のパスが表示されますfoo。それはあなたが期待するものですか?

そうでない場合は、名前を変更するか、絶対インポートfooを使用してください。

于 2017-05-02T06:41:36.897 に答える
3

Linux: インポートされたモジュールは /usr/local/lib/python2.7/dist-packages にあります

C でコンパイルされたモジュールを使用している場合は、.so ファイルの後に chmod することを忘れないでくださいsudo setup.py install

sudo chmod 755 /usr/local/lib/python2.7/dist-packages/*.so
于 2014-05-30T22:50:26.000 に答える
3

私の場合、問題はdebug python &にリンクしていたことでした。boost::Pythonこれには、拡張子が;FooLib_d.pydだけでなく. FooLib.pydファイルの名前を変更するか、プロパティを更新するCMakeLists.txtと、エラーが修正されました。

于 2013-09-04T02:52:25.287 に答える
0

同じエラーが発生しました。これは、誰かがスクリプトと同じフォルダーにフォルダーを作成し、その名前が他の場所からインポートしていたモジュールと競合したことが原因でした。外部モジュールをインポートする代わりに、予想されるモジュールが明らかに含まれていないこのフォルダー内を調べました。

于 2016-12-13T11:45:14.073 に答える
0

同じ問題に苦しんだ後、解決策がpycプロジェクトからすべてのファイルを削除することであることがわかりました。これらのキャッシュされたファイルが何らかの形でこのエラーを引き起こしているようです。

これを行う最も簡単な方法は、Windows エクスプローラーでプロジェクト フォルダーに移動し、 を検索して*.pycから、すべてを選択 ( Ctrl+ A) して削除 ( Ctrl+ X) することでした。

特定のpycファイルを削除するだけで問題を解決できた可能性がありますが、これを試したことはありません

于 2014-08-08T08:36:19.993 に答える
0

ubuntuapt-getインストーラーでは、通常、パッケージの python3 バージョンに名前が付けられます。

python3-XYZ

および python2 バージョン

python-XYZ

経験則として、エラー メッセージに記載されているパッケージを試してpython3-XYZみてください。python-XYZこのapt-getトリックは、依存パッケージに対しても、または代わりに必要になる場合があることに注意してください。

Python2.7 のフラスコ パッケージでも同じエラー メッセージが表示されましたが、試してみると消えてしまいました。

sudo apt-get install python-flask

したがって、試してください:

sudo apt-get install python-[YOURPYTHONVERION]-[YOURERRORPACKAGE]

または、言及された依存関係を確認してください。

于 2021-12-10T23:14:53.160 に答える
0

私の場合、実際のパッケージではなく、package.egg フォルダーへのパスを含めていました。パッケージをトップレベルにコピーしたところ、うまくいきました。

于 2018-06-29T22:57:55.227 に答える
0

これは私にとってはうまくいきました:__init__.py親フォルダー内(あなたの場合、site-packagesフォルダー内)にファイルを作成しました。そして、このようにインポートされました:

from site-packages.toolkit.interface import interface

あなたにも役立つことを願っています!

于 2019-03-13T12:30:30.863 に答える