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


144

インストールした後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
>>> 

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


実行の出力を見せていただけますeasy_installか?また、の完全なパスを確認してくださいeasy_installpipとのをpython
ラスク

2.6(ubuntuではデフォルト)にインストールされていませんか?(少なくとも私のdebianにあります)
dav1d

よく、簡単からの出力は、それが2.7にインストールされていますショーをインストールします。/usr/local/lib/python2.7/dist-packages/mechanize-0.2.6.dev_20130112-py2.7.eggインストール
ロイ・

@larks-その情報を元の投稿に追加
roy

私はこれをpypiとrepoからsetup.py、easy_install、pipのすべての方法で試しましたが、失敗することはありません。あなたがチェックすることができsys.pathますが、適切な場所で探しているかどうかを確認するためにls -laR /usr/local/lib/python2.7/dist-packages/mech*権限のトラブルをチェックするために、と見imp.find_module("mechanize")区別するcan't-それを見つけるとcan'tは、生き残る輸入-それでエラーが?
DSM

回答:


100

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


26
これは私に起こっただけで実行されていsudo pip install ...ます。簡単な修正:sudo chmod -R ugo+rX /lib/python2.7/site-packages/
jozxyqk 2015

3
私はこれに何度も遭遇し、私は理由を発見したと思います:umaskがsudoを介して渡されるので、個人のumaskがタイトであり、インストールにsudoを使用する場合、ファイルとディレクトリは過度に制限されます。最初に単にsuを実行してから、フルルートシェルからインストールを実行した場合、結果として得られるインストールは使用可能です(少なくとも私にとっては)。これはピップ用でしたが、apt-getにも適用される場合があります。他の人がこの原因を確認した場合、それに応じて回答を修正したいですか?
Brandyn、2015年

jozxyqkコメントに追加:$ pip show <package_name>を実行して、適切なディレクトリを取得していることを確認します
Federico

2
わたしも。私はMacでPython 3.6を使用sudo chmod 777 /usr/local/lib/python3.6/site-packagesしているので、トリックを行いました
Antonio Serrano

3
sudo 777は常に非常に悪い考えです
Marx

81

私は同じ問題を抱えていました:スクリプトimport coloramaがスローされていてImportErrorでしたが、sudo pip install colorama「パッケージはすでにインストールされています」と言っていました。

私の修正:sudoなしで pip 実行します:pip install colorama。次に、pipはそれをインストールする必要があることに同意し、インストールして、私のスクリプトを実行しました。

私の環境はUbuntu 14.04 32ビットです。virtualenvをアクティブ化する前後にこれを確認したと思います。

更新:さらに良い、使用しますpython -m pip install <package>。これの利点は、パッケージを入れたい特定のバージョンのpythonを実行しているため、pipはパッケージを「正しい」pythonに明確にインストールすることです。繰り返しますが、この場合はsudoを使用しないください。パッケージを適切な場所に配置しますが、(不要な)root権限が必要な場合があります。


1
または、sudoの-Hフラグを使用することもできます
Graydyn Young

21

これはpythonパスの問題です。

私の場合、私はpythonをインストールしています:

/ライブラリ/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パスにありません。私がしたのは、site-packagesをPYTHONPATHに永続的に追加することだけです。

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

    export PYTHONPATH = $ PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/

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

これは、Jenkinsをセレンpythonで動作させるのに役立ちました。
EDST

これは、私のbashスクリプトが私のセロリスクリプトを呼び出したときに、スーパーバイザーを介してセロリを実行するときに私にとってうまくいきました。セロリスクリプトは、pip内に既にインストールされているモジュールをインポートできませんでした。トンありがとう。
Shivam Sharma 2017

注:インポートエラーのもう1つの可能性は、コンピューターに複数のバージョンのPythonがインストールされていることです。たとえば、1つはシステムのPythonから、もう1つはMinicondaまたはAnacondaからです。したがって、必ず対応する正しい「pip」を使用してください。
Sanchit

8

Pythonインポートメカニズムは実際に機能するため、次のいずれかになります。

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

1
この場合、オプション3にすることはできません。これはImportErrorをスローしません。
Martijn Pieters

2
多分2?他のほとんどのライブラリで問題ない、この1つのライブラリの間違った場所にインストールされる理由がわかりません。
ロイ

3
オプション4:あなたのPYTHONPATHは右、あなたのライブラリーは、あなたがそれをしたい場合は、あなたがこれをマスキングライブラリを持っていないです...しかし、あなたが使用しているためsudo pip install、それを根PRIVSでインストールしまった、とインポート時に何かが不足のために爆撃されます読み取りまたは書き込みアクセス。
Dan H

2
かなり真実ではない、@MartijnPieters:フォームのインポートがあった場合「からは<パッケージ>インポート<FOO>」、および妨害パッケージがない「foo」を持っていない場合、その後、あなたはオプション3のインポートエラーを取得したいです
ダンH

@DanH確かに、それはOPが使用している形式ではありません。
Martijn Pieters

8

若いヒップなインターンがモジュールディレクトリ内の「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

7

この問題を組み合わせたアプローチで修正することができました。まず、Chrisのアドバイスに従い、コマンドラインを開いて「pip show packagename」と入力しました。これにより、インストールされたパッケージの場所がわかります。

次に、Pythonを開いて「import sys」と入力し、次に「sys.path」と入力して、Pythonがインポートしたパッケージを検索する場所を表示します。残念ながら、最初の手順で表示された場所はリストにありませんでした。

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

テストステップ、パッケージのインポートを再試行してください...機能します。

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


5

でインストールしたキーリングを使用しようとしたときに、この問題が発生しましたsudo pip install keyring。他の回答で述べたように、それは私の場合の権限の問題です。

私のために働いたもの:

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

お役に立てれば。



2

PYTHONPATHを正しく機能させることができませんでした。私exportは問題を修正して追加したことに気づきました:

(やりました)

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

(動作しませんでした)

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

2

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

次のpip showようなpipのコマンドを参照すると、

> 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ます。それも修正されます。


1

私の場合、Python 2.7環境にインポートしたかったのは、モジュール内のinit .pyファイルが欠落している問題でした。

Python 3.3以降には、暗黙の名前空間パッケージがあり、init .pyファイルなしでパッケージを作成できます。


1

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


1

また、と混同pip3しないように注意してくださいpip。私が見つけたのは、一緒pipにインストールされたパッケージが機能しておらずpython3、その逆も同様です。


0

easy_installまたはを介してインストールした場合pip、正常に完了していますか?完全な出力は何ですか?どのpythonインストールを使用していますか?sudoモジュールをシステムディレクトリにインストールする場合(システムpythonインストールを使用している場合など)、インストールコマンドの前にを使用する必要がある場合があります。質問に役立つ情報はあまりありませんが、次のようなツールが役立つでしょう。

  • echo $PYTHONPATHおよび/またはecho $PATH:モジュールをインポートするとき、Pythonはこれらの環境変数(ディレクトリのリスト、:区切られたリスト)の1つで目的のモジュールを検索します。多くの場合、インポートの問題は、これらのリストに適切なディレクトリがないために発生します

  • which pythonwhich pipまたはwhich easy_installこれらはあなたに、各実行可能ファイルの場所を教えてくれます。知っておくと役に立ちます。

  • 使用virtualenvの @JesseBriggsなどが示唆されています。との相性がよくpip、個別のPythonプロジェクトのモジュールと環境を分離して管理できます。


0

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

解決策はそれを止めて、インポートするのに必要なファイルをプロジェクトに置くだけでした。別のアプローチは、ファイルを時々再構築する必要があり、再構築がメインプロジェクトの再構築と一致する場合としない場合があるため、ファイルを独自のプロジェクトに配置することでした。


0

私のシステムに2.7と3.5をインストールして、Python-Telegram-Botで電報ボットをテストしようとすると、この問題が発生しました。

sudoの有無にかかわらず、pipとpip3を使用してインストールした後、動作しませんでした。私はいつも得ました:

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

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

ModuleNotFoundError: No module named 'somemodule'

私はそれが誰かにいくつかの時間を節約することを望みます:)


0

トピックから少し外れたかもしれませんが、問題がありましたimport PyYAML。あなたがする必要があることを指摘しimport yamlます。(それは古典的なrtfmだと思います...)


0

Djangoを使用して同様の問題が発生しました。私の場合、モジュールをDjangoシェルからインポートできましたが、モジュールをインポートした.pyからはできませんでした。
問題は、モジュールがインストールされている別のvirtualenvからDjangoサーバーを実行していた(したがって.pyを実行していた)ことでした

代わりに、シェルインスタンスは正しいvirtualenvで実行されていました。したがって、なぜ機能したのか。


0

これは動作します!!!

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

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

import <module_name>

0

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


0

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

python -m pip install -user {package name}

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


0

私の場合、スーパーユーザー用のモジュールもインストールする必要がありました。

sudo su
pip install <module>

どうやら、スーパーユースは特定の状況下では通常のユーザーのファイルにアクセスできません。


0

私にとっては、使用しているPythonのバージョンに合わせてモジュールのバージョンを確認することでした。私は、Python 3.6を使用してボックス上にイメージをビルドし、たまたま3.7がインストールされているDockerイメージに注入して、頭を叩きましたPythonがモジュールがインストールされていないと言っていたとき...

36m Python 3.6 bsonnumpy.cpython-36m-x86_64-linux-gnu.so

37m Python 3.7 bsonnumpy.cpython-37m-x86_64-linux-gnu.so


pip install使用しているPythonのバージョンと一致するバージョン。どのようなエラーが発生し、その出力は何ですかpython --version
ストリートスター

python --versionが私に与える:Python 3.7.7と、パッケージがpip show librosaでインストールされている場所をチェックすると、場所:/home/ec2-user/anaconda3/lib/python3.7/site-packagesは、パッケージが適切な場所にあることを意味しますが、パッケージをインポートすると、次のようになります:モジュール名がないAWS Sagemaker envで作業していますPytorch_p36
Walid Bousseta

おそらくあなたはpytorch_p37を使いたいですか?
ストリートスター

pytorch_p37はありません
Walid Bousseta

0

私はこれが非常に古い投稿であることを知っていますが、私にとっては、32ビットのpythonと64ビットのpythonのインストールに問題がありました。32ビットPythonをアンインストールすると、すべてが正常に機能しました。


0

同じライブラリが1つのプロジェクト(A)で正常に機能していたが、別のプロジェクト(B)に同じライブラリをインポートするとエラーが発生するという問題を解決しました。Windows OSでPycharmをIDEとして使用しています。したがって、多くの潜在的な解決策を試して問題を解決できなかった後、私は次の2つのことを行いました(「Venv」フォルダーを削除し、インタープリターを再構成しました)。

1-プロジェクト(B)では、( "venv")という名前のフォルダーがExternal Libraries /にありました。そのフォルダを削除しました。

2ステップ1(「venv」フォルダーの削除)により、Pythonインタープリターの構成でエラーが発生し、画面の上部に「プロジェクトに無効なpythonインタープリターが選択されました」および「pythonインタープリターの構成」というメッセージが表示され、そのリンクを選択します。新しいウィンドウが開きます。[プロジェクトインタープリター]ドロップダウンリストには、以前の無効なインタープリターを示す赤色の線があります。次に、このリストを開き、Pythonインタープリターを選択します(私の場合はPython 3.7です)。下部にある「適用」と「OK」を押してください。

注:これは、私のプロジェクトの仮想環境(B)が、すでにインストールされて機能しているライブラリを認識しない問題である可能性があります。


0

仮想環境を使用している場合はpipenv install <module name>pip install <module name>

私のために働いた。


pipenvが見つかりません
Walid Bousseta

0

この問題もありました。パッケージはPython 3.8.0にインストールされましたが、VSコードは古いバージョン(3.4)を使用してスクリプトを実行していました。

端末で修正:

py .py

適切なPythonバージョンにパッケージをインストールしていることを確認してください


0

友人が今日私のためにしたように、これが私を助けたものです(私はWindowsを使用しています):

「設定」->「プロジェクト」->「プロジェクトインタープリター」を押します。ここの右側のウィンドウには、左側に「プロジェクトインタープリター」というタイトルの行があります。この行をクリックすると、追加の行がいくつか開きます。

次に、「すべて表示」行を押します。ウィンドウが開きます。このウィンドウで、右上隅にある小さな「+」記号を押します。

新しいウィンドウが開きます。左側には4つのタブがあります。一番上のタブを押すと、「Virtualenv Environment」と表示されます。次に、右側のウィンドウで、「既存の環境」オプションをマークします。「通訳」ラインがよく見えるようになります。行の右側にある「...」ボタンを押します。

これで、参照ウィンドウが開きます。Python自体をにインストールたディレクトリを参照します。PyCharmを使用したものではありません。そこに到達したら、 'python.exe'ファイルを選択してOKを押します(ウィンドウが消えます)。

もう一度[OK]を押します(このウィンドウも消えます)。

このウィンドウで、作成した新しい行がマークされていることを確認し、もう一度[OK]を押します。

これで、インストールされたすべてのパッケージがプロジェクトインタープリターに表示され、プログラムによって読み取られます。


0

このスレッドで言及されていない私にとっては最も簡単な解決策:

複数のバージョンのPythonがインストールされていますが、Python3.7を使用しようとしていました。

sudo pip3.7 install <package>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.