web-dev-qa-db-ja.com

確実にインストールされているモジュールをインポートできません

mechanize をインストールした後、インポートできないようです。

私はこのリポジトリからpip、easy_install、そしてpython setup.py install経由でインストールしてみました。 https://github.com/abielr/mechanize 。 Pythonインタラクティブに入るたびに、次のようになります。

Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import mechanize
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named mechanize
>>> 

以前に実行したインストールでは、それらが正常に完了したことが報告されたので、インポートが機能することを期待しています。このエラーの原因は何ですか?

96
roy

私の場合は、許可問題です。パッケージはどういうわけかroot rwパーミッションだけでインストールされました、他のユーザはそれにrwできません!

74
Paul Wang

私は同じ問題を抱えていました:import coloramaを含むスクリプトはImportErrorを投げていましたが、Sudo pip install coloramaは「package already installed」と言っていました。

私の修正:pip Sudoなしpip install coloramaを実行してください。それからpipはそれがインストールされる必要があることに同意し、それをインストールし、そして私のスクリプトが走りました。

私の環境はUbuntu 14.04 32ビットです。私は私のvirtualenvを有効にする前後にこれを見たと思います。

UPDATE:さらに良いのはpython -m pip install <package>を使うことです。これの利点は、あなたがパッケージを入れたい特定のバージョンのpythonを実行しているので、pipはパッケージを「正しい」pythonに明白にインストールすることです。この場合も、Sudoを使用しない...正しい場所にパッケージを取得しますが、(不要な)root権限を使用することもできます。

55
Dan H

それはPythonパスの問題です。

私の場合は、Pythonを次の場所にインストールしています。

/Library/Frameworks/Python.framework/Versions/2.6/bin/python、

そしてpython2.6にはsite-packagesディレクトリはありません。

私がpipでインストールしたパッケージ(SOAPpy)は次の場所にあります。

/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/

そしてsite-packageはpythonのパスに入っていません、私がしたことは恒久的にPYTHONPATHにsite-packagesを追加することです。

  1. ターミナルを開く
  2. Open .bash_profileと入力します。
  3. ポップアップ表示されるテキストファイルで、最後に次の行を追加します。

    pYTHONPATH = $ PYTHONPATHをエクスポートします。

  4. ファイルを保存してターミナルを再起動すれば完了です。
13
user1552891

Pythonのインポートメカニズムは、実際にはうまくいきます。

  1. あなたのPYTHONPATHが間違っている、
  2. あなたのライブラリはあなたがそれがあると思う場所にインストールされていません
  3. この名前を隠している同じ名前の別のライブラリがあります
6
Ali Afshar

若いヒップなインターンが秘密を "python setup.py install"することを私に言うまで、私は私のモニターに頭をぶつけてきましたモジュールディレクトリの中

何らかの理由で、そこからセットアップを実行しても動作します。

明確にするために、あなたのモジュールの名前が "foo"であれば:

[burnc7 (2016-06-21 15:28:49) git]# ls -l
total 1
drwxr-xr-x 7 root root  118 Jun 21 15:22 foo
[burnc7 (2016-06-21 15:28:51) git]# cd foo
[burnc7 (2016-06-21 15:28:53) foo]# ls -l
total 2
drwxr-xr-x 2 root root   93 Jun 21 15:23 foo
-rw-r--r-- 1 root root  416 May 31 12:26 setup.py
[burnc7 (2016-06-21 15:28:54) foo]# python setup.py install
<--snip-->

パスを呼び出して他のディレクトリからsetup.pyを実行しようとすると、インストールが中断されてしまいます。

動作しません:

python /root/foo/setup.py install

動作します:

cd /root/foo
python setup.py install
5
Locane

私はSudo pip install keyringでインストールしたキーリングを使用しようとしているときにこれに遭遇しました。他の答えで述べたように、それは私の場合の許可の問題です。

私にとってうまくいったこと:

  1. アンインストールされたキーリング:
    • Sudo pip uninstall keyring
  2. 私はSudoの-Hオプションを使い、キーリングを再インストールしました:
    • Sudo -H pip install keyring

お役に立てれば。

3
blackleg

PYTHONPATHを正しく動作させることができませんでした。 exportを追加することで問題が解決したことに気付きました。

(働きました)

export PYTHONPATH=$PYTHONPATH:~/test/site-packages

vs.

(動作しませんでした)

PYTHONPATH=$PYTHONPATH:~/test/site-packages
2
George Weber

私はこの問題を組み合わせた方法で修正することができました。最初に、私はクリスのアドバイスに従い、コマンドラインを開き、「pip show packagename」と入力しました。これはインストールされたパッケージの場所を提供しました。

次に、pythonを開き、 'import sys'と入力してから 'sys.path'と入力して、自分のpythonがインポートしたパッケージを検索する場所を表示します。残念ながら、最初のステップで表示された場所はリストにありませんでした。

最後のステップで、 'sys.path.append(' package_location_seen_in_step_1 ')と入力しました。場所がリストに表示されていることを確認するには、手順2を繰り返します。

テストステップで、もう一度パッケージをインポートしてみてください。

欠点は?これは一時的なもので、毎回リストに追加する必要があります。

2
MJ_

私の場合はpip install Django==1.11を実行しましたが、pythonインタプリタからはインポートされません。

Pipのコマンドを拾い読みすると、pip showが見つかりました。

> pip show Django
Name: Django
Version: 1.11
...
Location: /usr/lib/python3.4/site-packages
...

場所が「3.4」と言っていることに注意してください。 python-コマンドがpython2.7にリンクされていることがわかりました

/usr/bin> ls -l python
lrwxrwxrwx 1 root root 9 Mar 14 15:48 python -> python2.7

そのすぐ隣に私はpython3というリンクを見つけたので、それを使いました。リンクをpython3.4に変更することもできます。それもそれを修正します。

2
Chris

私の場合は、モジュールにinit。pyファイルがないため、Python 2.7環境にインポートしたいという問題がありました。

Python 3.3+には、init。pyファイルなしでパッケージを作成することを可能にする暗黙の名前空間パッケージがあります。

1
jens_laufer

私はPythonが初めてです。プロジェクトインタプリタのパスを変更してこの問題を解決しました。
File -> Settings -> Project -> Project Interpreter

1
Amit Dheemate

私はこの正確な問題を抱えていましたが、上記の答えはどれもうまくいきませんでした。親プロジェクトからインポートした後にsys.pathが異なることに気付くまで、私は頭がおかしくなりました。プロジェクト階層にないファイルをインポートするために、importlibを使って小さな関数を書いていたことがわかりました。悪い考え:私はこれをしたことを忘れました。さらに悪いことに、インポートプロセスはsys.pathを不正に実行し、そのままにしました。 非常に悪い考えです。

解決策はそれを止めて、インポートするために必要なファイルをプロジェクトに入れることでした。ファイルは時々再構築する必要があるため、ファイルを独自のプロジェクトに入れるという方法もあります。この再構築はメインプロジェクトの再構築と一致する場合もあれば、一致しない場合もあります。

0
ivanlan

ちょっと話題が違うかもしれませんが、私はimport PyYAMLに問題がありました。 import yamlが必要だと指摘します。 (それは古典的なrtfmだと思います...)

0
huch

私のために働いたのは:

python -m pip install -user {package name}

このコマンドにはSudoは必要ありません。これはOSX Mojaveでテストされました。

0
IShaan

Djangoを使っても同じような問題がありました。私の場合、Djangoシェルからモジュールをインポートできましたが、モジュールをインポートした.pyからはインポートできませんでした。
問題は、モジュールがインストールされていた別のvirtualenvからDjangoサーバーを(つまり.pyを実行して)実行していたことです。

代わりに、Shellインスタンスは正しいvirtualenvで実行されていました。だから、なぜそれがうまくいったのか。

0
aleclara95

この作品!

これは、モジュールが古いバージョンのpythonまたは別のディレクトリにインストールされている場合によく起こります。解決策は簡単なので心配ありません。 - モジュールがインストールされているディレクトリからモジュールをインポートします。これを行うには、まずpython sysモジュールをインポートしてから、そのモジュールがインストールされているパスからインポートします。

import sys
sys.path.append("directory in which module is installed")

import <module_name>
0

上記の他の回答がうまくいかない場合は、pipキャッシュを削除してパッケージを再インストールしてみてください。私のマシンはUbuntu14.04を実行しており、~/.cache/pipの下にありました。このフォルダを削除すると、私にとってはうまくいきませんでした。

0
Scrotch

考えられるケースのほとんどはすでにソリューションでカバーされており、私のケースを共有するだけで、ある環境にパッケージをインストールし(例:X)、別の環境にパッケージをインポートしていました(例:Y)。そのため、パッケージをインストールした環境からパッケージをインポートしていることを常に確認してください。

0
Pedram

私は(Windows上で)同様の問題を抱えており、私の場合の根本的な原因はアンチウイルスソフトウェアでした!実行中のプロセスをある種の仮想マシンでラップする「自動封じ込め」機能があります。症状は以下のとおりです。pip install somemoduleが1つのcmd行のウィンドウで正常に機能し、import somemoduleが別のプロセスから実行されるとエラーで失敗する

ModuleNotFoundError: No module named 'somemodule'

私はそれが誰かに時間を節約することを願っています:)

0
Dima Gershman

Python-Telegram-Bot でテレグラムボットをテストしようとしている私のシステムにインストールされた2.7と3.5でこの問題がありました。

Pipとpip3を使って、Sudoを使っても使わなくてもインストールできなかった。私はいつも得た:

Traceback (most recent call last):
  File "telegram.py", line 2, in <module>
    from telegram.ext import Updater
  File "$USER/telegram.py", line 2, in <module>
    from telegram.ext import Updater
ImportError: No module named 'telegram.ext'; 'telegram' is not a package

エラーメッセージを正しく読むことで、pythonが現在のディレクトリでtelegram.pyを探していることがわかります。それに、そこにはtelegram.pyという名前のスクリプトがあり、これはimportを呼び出すときにpythonによってロードされました。

結論、インポートしようとするとき、あなたの現在の作業ディレクトリにpackage.pyがないことを確認してください。 (そしてエラーメッセージをよく読んでください)。

0
Patrick B.