2017-09-06 2 views
0

私はPythonには比較的新しく、私の会社ではすでに自動化フレームワークを開発しています。インタプリタ経由でPythonスクリプトを実行しようとすると、なぜ "ImportError:No module named"が表示されますか?

開発プロセスで初めて、いくつかのテストを同時に実行する必要があるという状況に陥りました。この時点まで、私はフレームワークを開発するだけでなく、テストを実行するためにEclipseを常に使用しました(もちろん、一度に1つだけです)。 CMD画面 "python"を使って私のテスト(私がEclipseを使って実行したもの)を実行しようとしたとき、実行されていなかったので、 "ImportError:No module named"私が開発したパッケージから行う輸入に)

Pythonインタプリタはできなかったが、EclipseはすべてのMy Importsと一緒になり、テストを実行する方法は?

インタープリタを使用してテストを実行するにはどうすればよいですか?

編集

次は私が私の独自のモジュール

C:\Users\alpha_2.PL\workspace\PacketLight Automation\Test_Cases>python 
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 
64 bit (AM D64)] on win32 Type "help", "copyright", "credits" or 
"license" for more information. 
>>> from Utilities.Browser_Utils import Open_Browser Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: 
No module named 'Utilities' 
>>> quit() 

C:\Users\alpha_2.PL\workspace\PacketLight Automation\Test_Cases>cd.. 

C:\Users\alpha_2.PL\workspace\PacketLight Automation>cd Utilities 

C:\Users\alpha_2.PL\workspace\PacketLight Automation\Utilities>python 
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 
64 bit (AM D64)] on win32 Type "help", "copyright", "credits" or 
"license" for more information. 
>>> from Utilities.Browser_Utils import Open_Browser Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: 
No module named 'Utilities' 
>>> quit() 

C:\Users\alpha_2.PL\workspace\PacketLight Automation\Utilities>dir 
Volume in drive C has no label. Volume Serial Number is 1E0C-6554 

    Directory of C:\Users\alpha_2.PL\workspace\PacketLight Automation\Utilities 

08/07/2017 03:05 PM <DIR>   . 
08/07/2017 03:05 PM <DIR>   .. 
08/10/2017 10:28 AM    455 Browser_Utils.py 
09/05/2017 05:00 PM    7,007 General_Utils.py 
07/31/2017 01:49 PM     0 __init__.py 
09/05/2017 06:07 PM <DIR>   __pycache__ 
       3 File(s)   7,462 bytes 
       3 Dir(s) 394,707,480,576 bytes free 

C:\Users\alpha_2.PL\workspace\PacketLight Automation\Utilities>python 
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 
64 bit (AM D64)] on win32 Type "help", "copyright", "credits" or 
"license" for more information. 
>>> from Utilities.Browser_Utils import Open_Browser 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> ImportError: 
No module named 'Utilities' 
>>> 
+0

利用のpython3の代わりに、あなたのコマンドでのpythonに関するいかなる方向性を持っていなかったあなたなしで答えたすべての人々のための

感謝。そうでなければ、pip3を使ってpython3パッケージをすべてインストールする必要があります。 –

+1

Python環境について少し読んでみる必要があるようです。IDEで言語を使うことを学んだ人にはめったにありません。 EclipseはPYTHONPATH環境変数を管理するために特別な努力をしていることがわかります。 – holdenweb

+0

@rabbit_mq python3とは何ですか?なぜ私の問題を解決できると思いますか? –

答えて

1

私はついにこの問題を解決することができました。ここでの答えがPYTHONPATHを指していたとき、私はPATH(環境変数)を誤解していたため、sys.pathを編集するだけで問題は解決しませんでした。私はPYTHONPATHを自分で作成して、私は私のパッケージをインポートするために管理し、その後、私自身のパスを追加する必要があることに気づい

。私は、この問題の解決

2

をインポートするためにしようとしたものに一例であり、私は想像することができるすべては、Eclipseがどの、プロジェクトディレクトリからあなたのコマンドを実行するだろうということです相対輸入が可能になる。

もし私が/ home/jpicでpythonを実行していて、そこにfoo.pyが存在するなら、私はimport fooです。しかし、私が/ homeでpythonを実行している場合、import fooは失敗します。ですから、Pythonを呼び出す前に正しいディレクトリにcdしてください。

fooをどこからでもインポートできるようにしたいのであれば、私はあなたのプロジェクトでやりたいことではないかもしれないPythonパッケージにしなければならないでしょう(しかし、すべてのプロジェクトでは、どこでも働く輸入品を^ ^)。

あなたは、輸入をデバッグ-vvpythonを実行したい場合は、あなたのような輸入のデバッグ出力を取得します:上記のデバッグ出力を標準エラーではなく、標準入力に作られていること

# trying /home/jpic/foo.cpython-36m-x86_64-linux-gnu.so 
# trying /home/jpic/foo.abi3.so 
# trying /home/jpic/foo.so 
# trying /home/jpic/foo.py 
# trying /home/jpic/foo.pyc 
# trying /usr/lib/python3.6/foo.cpython-36m-x86_64-linux-gnu.so 
# trying /usr/lib/python3.6/foo.abi3.so 
# trying /usr/lib/python3.6/foo.so 
# trying /usr/lib/python3.6/foo.py 
# trying /usr/lib/python3.6/foo.pyc 
# trying /usr/lib/python3.6/lib-dynload/foo.cpython-36m-x86_64-linux-gnu.so 
# trying /usr/lib/python3.6/lib-dynload/foo.abi3.so 
# trying /usr/lib/python3.6/lib-dynload/foo.so 
# trying /usr/lib/python3.6/lib-dynload/foo.py 
# trying /usr/lib/python3.6/lib-dynload/foo.pyc 
# trying /home/jpic/.local/lib/python3.6/site-packages/foo.cpython-36m-x86_64-linux-gnu.so 
# trying /home/jpic/.local/lib/python3.6/site-packages/foo.abi3.so 
# trying /home/jpic/.local/lib/python3.6/site-packages/foo.so 
# trying /home/jpic/.local/lib/python3.6/site-packages/foo.py 
# trying /home/jpic/.local/lib/python3.6/site-packages/foo.pyc 
# trying /home/jpic/src/django-cities-light/foo.cpython-36m-x86_64-linux-gnu.so 
# trying /home/jpic/src/django-cities-light/foo.abi3.so 
# trying /home/jpic/src/django-cities-light/foo.so 
# trying /home/jpic/src/django-cities-light/foo.py 
# trying /home/jpic/src/django-cities-light/foo.pyc 
# trying /home/jpic/src/django-autocomplete-light/src/foo.cpython-36m-x86_64-linux-gnu.so 
# trying /home/jpic/src/django-autocomplete-light/src/foo.abi3.so 
# trying /home/jpic/src/django-autocomplete-light/src/foo.so 
# trying /home/jpic/src/django-autocomplete-light/src/foo.py 
# trying /home/jpic/src/django-autocomplete-light/src/foo.pyc 
# trying /home/jpic/src/django-autocomplete-light/test_project/src/genericm2m/foo.cpython-36m-x86_64-linux-gnu.so 
# trying /home/jpic/src/django-autocomplete-light/test_project/src/genericm2m/foo.abi3.so 
# trying /home/jpic/src/django-autocomplete-light/test_project/src/genericm2m/foo.so 
# trying /home/jpic/src/django-autocomplete-light/test_project/src/genericm2m/foo.py 
# trying /home/jpic/src/django-autocomplete-light/test_project/src/genericm2m/foo.pyc 
# trying /home/jpic/work/mez/src/foo.cpython-36m-x86_64-linux-gnu.so 
# trying /home/jpic/work/mez/src/foo.abi3.so 
# trying /home/jpic/work/mez/src/foo.so 
# trying /home/jpic/work/mez/src/foo.py 
# trying /home/jpic/work/mez/src/foo.pyc 
# trying /usr/lib/python3.6/site-packages/foo.cpython-36m-x86_64-linux-gnu.so 
# trying /usr/lib/python3.6/site-packages/foo.abi3.so 
# trying /usr/lib/python3.6/site-packages/foo.so 
# trying /usr/lib/python3.6/site-packages/foo.py 
# trying /usr/lib/python3.6/site-packages/foo.pyc 
# trying /usr/lib/python3.6/site-packages/gtk-2.0/foo.cpython-36m-x86_64-linux-gnu.so 
# trying /usr/lib/python3.6/site-packages/gtk-2.0/foo.abi3.so 
# trying /usr/lib/python3.6/site-packages/gtk-2.0/foo.so 
# trying /usr/lib/python3.6/site-packages/gtk-2.0/foo.py 
# trying /usr/lib/python3.6/site-packages/gtk-2.0/foo.pyc 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<frozen importlib._bootstrap>", line 961, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 948, in _find_and_load_unlocked 
ModuleNotFoundError: No module named 'foo' 

注意。つまり、>の代わりに&>を使用して、ファイルをbash4にリダイレクトするか、2>窓でと答えてください。their docsを読んだ後、と思っています。

私はそれが何であるか話すことができませんが、このトリックは、あなた自身の解決策をハックするためにインタプリタから十分なフィードバックを与える必要があります。

EclipseはPython3を使用し、Python2はCLIで使用している可能性があります。この場合、モジュールディレクトリに__init__.pyファイルを追加するか、CLIがpython 3であることを確認してください。python --versionで確認してください。例:

07/09 2017 12:03:11 [email protected] /tmp 
$ mkdir foo 

07/09 2017 12:03:13 [email protected] /tmp 
$ touch foo/bar.py 

07/09 2017 12:03:16 [email protected] /tmp 
$ python3 
Python 3.6.2 (default, Jul 20 2017, 03:52:27) 
[GCC 7.1.1 20170630] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import foo.bar 
>>> 

07/09 2017 12:03:20 [email protected] /tmp 
$ python2 
Python 2.7.13 (default, Jul 21 2017, 03:24:34) 
[GCC 7.1.1 20170630] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import foo.bar 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named foo.bar 
>>> 

07/09 2017 12:03:28 [email protected] /tmp 
$ touch foo/__init__.py 

07/09 2017 12:03:33 [email protected] /tmp 
$ python2 
Python 2.7.13 (default, Jul 21 2017, 03:24:34) 
[GCC 7.1.1 20170630] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import foo.bar 
+0

'でご利用いただけますその結果を ">"のファイルに出力します。だから、リストがCMDのバッファサイズよりも長いので、私は本当にデバッグにそれを使うことができません。ところで、私はすでに "print(sys.path)"を使ってデバッグを開始しており、どのパスが含まれているかを明らかにしました。私が間違っている場合は私を修正しますが、私のパスが見つからない場合、Pythonが私がインポートする独自のモジュールを解釈できる理由はありません –

+0

これは標準エラーに出力されているためです標準出力。 bash 4の場合、 '>'の代わりに '&>'を試してください。また、sys.pathは '[''、...]'という空文字列で始まります。これは現在の作業ディレクトリを表しています。これは私の答えの冒頭で話しています。 – jpic

+0

ところで、上記の作業を行った後、私はすべてのプロジェクト(すべてのパッケージを含む)をsys.pathにあるパスの1つにコピーして、スクリプトの1つを実行しようとしました。これはまた、 "ImportError:No module named" –

0

モジュールをインポートできるようにIDEに依存しないでください。

仮想環境を使用している場合(または自分の責任において、sudoをシステムPythonにインストールする場合)、pipユーティリティを使用して正しくパッケージされたソフトウェアを簡単にインストールできます。

あなたは、それらを行うPYTHONPATH環境変数がセミコロン(Windows)またはコロン(UNIX)でなければならないことに注意する方法を学ぶまでは、インタプリタの起動時にsys.pathの前に付加されてそれぞれのディレクトリのリストを分離しました。したがって、ソフトウェアがpipでない場合でも、使用可能にすることができます。

+0

私はユーティリティパッケージ(上記の例から)パスをsys.path( "sys.path.append()"を使って)に追加しましたが、 "Utilities.Browser_Utils import –

+0

この問題のために[MCVE](https://stackoverflow.com/help/mcve)を作成しようとしていますが、それを公式化する過程で、 – holdenweb

+0

私がthaと言うなら私は最初からやりたい。 Pythonをインストールしたら、次のステップは新しいパッケージとモジュールを書くことです。この場合、sys.pathに手を触れる必要がないために、どこにパッケージを置く必要がありますか?そして、もし私が自分のパッケージを作りたいと思ったら、どこに置いておきたいのですか?どこにパッケージを置くのでしょうか、sys.pathに書き込む必要があるのでしょうか? –

関連する問題