web-dev-qa-db-ja.com

Python 3はサードパーティのパッケージをインポートできません

Pythonバージョン3.5.2があり、pip3があるので、

Sudo pip3 install pyqt5

/usr/local/lib/python3.5/dist-packagesにインストールされました

ただし、python 3インタープリターを入力して入力すると、

import PyQt5

pyQt5という名前のモジュールが見つからないというエラーが表示されます。

だから私は/usr/local/lib/python3.5/dist-packagesパスをPYTHONPATHに追加してみました

export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.5/dist-packages

しかし、それは何も修正しませんでした。 Python 3.5.2でPyQt5を検出するにはどうすればよいですか?

2
Shadowfax

ジョージのおかげで、私はゆっくりと答えを得ました。問題の根本は、Ubuntu aptitudeパッケージマネージャーからではなく、ソースからPython 3.5.2バージョンをインストールしたことにあります。

基本的に、Pythonがソースからインストールされている場合、サードパーティパッケージを探すために/usr/local/lib/python3.5/site-packagesを使用しますが、aptを使用してインストールされている場合はPythonは/usr/local/lib/python3.5/dist-packagesを検索します。これは、いくつかのPythonバージョンが絡まないようにするためです。以下に説明する別の質問があります: dist-packagesとsite-packagesの違いは何ですか?

解決策:

Python3のインストールでは、サイトパッケージを調べ、dist-packagesを無視していました。そのため、dist-packagesの内部にも見えるようにパスファイルを追加しました。

cd /usr/local/lib/python3.5/site-packages
Sudo vim dist-packages.pth
(Press i to go into insert mode inside Vim)
../dist-packages
:x (and Press Enter/Return)

Pythonが/site-packagesの中を見ると、dist-packages.pthを見つけて/dist-packagesに入ります。

その他の解決策:

他の誰か は私の逆の問題を抱えていました。そこではPythonインストールは/dist-packagesの内部しか見えなかったので、 dist-packages.pth内の../dist-packagesファイル(/site-packagesを含む)、site-packages.pthファイル(../site-packages内の/dist-packagesを含む)を作成しました。

動作したかどうかを確認します:

これが機能しているかどうかを確認する簡単な方法は、Pythonインタープリターに移動してsys.pathを出力することです。これで、両方のパッケージパスが含まれるようになります。

charliebrown@playground:/usr/local/lib/python3.5/site-packages$ python3
Python 3.5.2 (default, Nov 19 2016, 02:36:25) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys; print(sys.path)
['', '/usr/local/lib/python35.Zip', '/usr/local/lib/python3.5',     '/usr/local/lib/python3.5/plat-linux', '/usr/local/lib/python3.5/lib-dynload', 
'/usr/local/lib/python3.5/site-packages', '/usr/local/lib/python3.5/dist-packages']

これがいつか誰かを助けることを願っています...

3
Shadowfax