web-dev-qa-db-ja.com

Pythonスクリプトを実行しようとすると「ImportError:No module named」と表示される

私は、とりわけPythonスクリプトを起動するスクリプトを実行しようとしています。 ImportError:という名前のモジュールはありません...しかし、ipythonを起動してインタープリタを介して同じ方法で同じモジュールをインポートすると、そのモジュールは受け入れられます。

何が起こっていますか、そしてどのように修正できますか?私はpythonがPYTHONPATHをどのように使用するかを理解しようとしましたが、私は完全に混乱しています。任意の助けは大歓迎です。

107
CodeOcelot

この問題は、コマンドラインのIPythonインタプリタが現在のパスを使用する方法と、別のプロセスが使用する方法(IPythonノートブックの場合)によって生じる。 、外部プロセスなど) IPythonは、あなたのsys.pathだけでなく、あなたの現在の作業ディレクトリでも、インポートするモジュールを探します。コマンドラインからインタプリタを起動する場合、現在操作しているディレクトリはipythonを起動したディレクトリと同じです。

import os
os.getcwd() 

あなたはこれが本当であるのを見るでしょう。

しかし、ipythonノートブックを使用しているとします。os.getcwd()を実行します。現在の作業ディレクトリは、代わりにipython_notebook_config.pyファイルでノートブックを操作するように指示したフォルダです(通常はc.NotebookManager.notebook_dir設定を使用)。

解決策はあなたのモジュールへのパスをPythonインタプリタに提供することです。最も簡単な解決策は、そのパスをsys.pathリストに追加することです。あなたのノートブックで、まず試してみてください。

import sys
sys.path.append('my/path/to/module/folder')

import module-of-interest

それでもうまくいかない場合は、インポートパスとは無関係に別の問題が発生しているため、その問題に関する詳細情報を提供する必要があります。

これを解決するためのもっと良い(そしてもっと恒久的な)方法はあなたのPYTHONPATHを設定することです。モジュールPYTHONPATHをグローバル変数として編集または設定することは、依存しているので、 nix または Windows について詳しく説明します。

143
tyleha

Pythonプロジェクトを実行している間に、エラーが表示されているフォルダーの下に__init__.pyという名前の空のpythonファイルを作成するだけです。

12

両方が同じインタプリタを使用していることを確認してください。これはUbuntuで私に起こりました:

$ ipython3
> sys.version
'3.4.2 (default, Jun 19 2015, 11:34:49) \n[GCC 4.9.1]'

$ python3
> sys.version
'3.3.0 (default, Nov 27 2012, 12:11:06) \n[GCC 4.6.3]'

そしてsys.pathは2つのインタプリタの間で異なっていました。それを修正するために、私はPython 3.3を削除しました。

9
z0r

sys.path.append('my-path-to-module-folder')を実行しても機能しますが、モジュールを使用するたびにIPythonでこれを行わなくても済むように、export PYTHONPATH="my-path-to-module-folder:$PYTHONPATH"ファイルに~/.bash_profileを追加できます。

6
acannon828

主な理由は、PythonとIPythonのsys.pathが異なることです

lucypark link を参照してください、解決策は私の場合はうまくいきます。でopencvをインストールすると起こります

conda install opencv

そしてiPythonでインポートエラーが発生しました、この問題を解決するための3つのステップがあります:

import cv2
ImportError: ...

1。次のコマンドでPythonとiPythonのパスを確認してください

import sys
sys.path

あなたはそれらが異なった結果であることに気付くべきです。 2番目のステップは、失敗したパスをtry-and-errorで修正するためにsys.path.appendを使用することです。

2。一時的な解決策

IPythonでは:

import sys
sys.path.append('/home/osboxes/miniconda2/lib/python2.7/site-packages')
import cv2

ImportError:..問題が解決しました

3。恒久的な解決策

IPythonプロファイルを作成して初期追加を設定します。

Bashシェルの場合:

ipython profile create
... CHECK the path prompted , and edit the prompted config file like my case
vi /home/osboxes/.ipython/profile_default/ipython_kernel_config.py

Viでは、ファイルに追加します。

c.InteractiveShellApp.exec_lines = [
 'import sys; sys.path.append("/home/osboxes/miniconda2/lib/python2.7/site-packages")'
]

完了

5
Jesse

Ipythonをインストールする前に、私はeasy_installを通してモジュールをインストールしました。 Sudo easy_install mechanizeと言います。

Ipythonをインストールした後、ipythonがモジュールを認識するようにeasy_installを再実行しなければなりませんでした。

2
pandorabob

コマンドラインから実行している場合、pythonインタプリタはモジュールを探す場所を認識していないことがあります。

以下は私のプロジェクトのディレクトリ構造です:

/project/apps/..
/project/tests/..

私はコマンドの下で実行されていました:

>> cd project

>> python tests/my_test.py

上記のコマンドを実行した後、私はエラーの下になった

no module named lib

libはmy_test.pyにインポートされました

sys.pathを印刷し、作業中のプロジェクトのパスがsys.pathリストに表示されないことを考え出しました。

私は私のスクリプトmy_test.pyの始めに以下のコードを追加しました。

import sys
import os

module_path = os.path.abspath(os.getcwd())    

if module_path not in sys.path:       

    sys.path.append(module_path)

それがそれを解決するための良い方法であるかどうか私にはわかりませんが、ええそれは私のためにうまくいきました。

1
Raghav salotra

私は、この問題に対する解決策がここに広く文書化されていることを発見しました:

https://jakevdp.github.io/blog/2017/12/05/installing-python-packages-from-jupyter/

基本的には、Jupyter環境内にパッケージをインストールして、以下のようなシェルコマンドを発行する必要があります。

!{sys.executable} -m pip install numpy

正式な全回答については、上記のリンクを確認してください。

1
Rui Guerra

私はこの矛盾のさらに別の原因を見つけました:

私はipythonをローカルでも一般的にもvirtualenvsにインストールしています。私の問題は、ipythonを使って新しく作られたvirtualenvの中で、システムipythonが選ばれたことです。これは、virtualenvの中のpythonやipythonとは異なるバージョン(2.7.x対3.5.x)で、ハイラリティが続きました。

私はyourvirtualenv/binにバイナリを含むものをインストールするときはいつでも賢いことは正しいpython/ipythonが拾われるようにあなたが使っているどんなシェルでもrehashまたは同様のものを直ちに実行することであると思います。 (適切なpipインストール後フックがあるかどうか確認してください...)

0
kaleissin

スクリプトなしの解決策:

  1. スパイダーを開く - >ツール - > PYTHONPATHマネージャ
  2. [パスを追加]をクリックしてPythonパスを追加します。例: 'C:¥Users¥User¥AppData¥Local¥Programs¥Python¥Python37¥Lib¥site-packages'
  3. 他のプログラム(Jupyter Notebookなど)が手順2で設定したpythonpathを使用できるようにするには、[同期]をクリックします。
  4. Jupyterが開いている場合は再起動します
0
Wen

これはおそらくシステムにインストールされているpythonのバージョンが異なるため、つまりpython2またはpythonです。

コマンド$ pip --versionおよび$ pip3 --versionを実行して、どのpipPython 3xからのものであるかを確認します。例えば。以下のようなバージョン情報が表示されます。

pip 19.0.3 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)

次に、以下のコマンドでexample.pyスクリプトを実行します。

$ python3 example.py
0
shizhen

これは私がそれを修正した方法です:

import os
import sys
module_path = os.path.abspath(os.getcwd() + '\\..')
if module_path not in sys.path:
    sys.path.append(module_path)
0
pomber

同様の問題がありました、pythonの代わりにpython3を呼び出すことによってそれを修正しました、私のモジュールはPython3.5にありました。

0
peter n