前提・実現したいこと
ラズパイ python のライブラリを入れたのですが、うまくできず。
おそらくpathが通っていないようにみえたのですが
方法が分からず、どなたかお知恵をお借りできれば幸いです。
発生している問題・エラーメッセージ
>>> import aiohttp Traceback (most recent call last): File "<stdin>", line 1, in <module> ModuleNotFoundError: No module named 'aiohttp'
pipでインストールしようとすると、下記入っているようです
pi@raspberrypi:~ $ pip3 install aiohttp Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Requirement already satisfied: aiohttp in ./.local/lib/python3.7/site-packages (3.7.4.post0) Requirement already satisfied: yarl<2.0,>=1.0 in ./.local/lib/python3.7/site-packages (from aiohttp) (1.6.3) Requirement already satisfied: multidict<7.0,>=4.5 in ./.local/lib/python3.7/site-packages (from aiohttp) (5.1.0) Requirement already satisfied: chardet<5.0,>=2.0 in /usr/lib/python3/dist-packages (from aiohttp) (3.0.4) Requirement already satisfied: async-timeout<4.0,>=3.0 in ./.local/lib/python3.7/site-packages (from aiohttp) (3.0.1) Requirement already satisfied: attrs>=17.3.0 in ./.local/lib/python3.7/site-packages (from aiohttp) (21.2.0) Requirement already satisfied: typing-extensions>=3.6.5 in ./.local/lib/python3.7/site-packages (from aiohttp) (3.10.0.2) Requirement already satisfied: idna>=2.0 in /usr/lib/python3/dist-packages (from yarl<2.0,>=1.0->aiohttp) (2.6)
windowsだとpathを通すはやったことがあるのですが、ラズパイだと良く分からず。。
すみませんがどなたかお知恵をお借りできれば幸いです。
> Requirement already satisfied: aiohttp in ./.local/lib/python3.7/site-packages (3.7.4.post0)
「./.local/lib/python3.7/site-packages」にあるので、「import aiohttp」よりも前(上)に、そこの絶対パスを「sys.path.append()」で追加してみてください
参考
https://www.lifewithpython.com/2014/01/python-add-directories-to-path-to-import-libraries-from.html
複数のPythonがインストールされている環境で、他のPythonにpipとかcondaでインストールされたライブラリ(モジュール)をsys.path.appendを使って読み込むと、不整合が発生することがあるので、sys.path.appendを使うのは他の方法ではできないときの最終手段だと考えてください。
ありがとうございます。
今のところ、下記やってみたらうまくいったようです。
$ sudo python
import sys
sys.path.append("./.local/lib/python3.7/site-packages")
今回に限っては不整合は発生していないようです。
そこで、pythonファイルで毎回呼び出すのではなく、
環境変数として、pathを通したいと思いました。
↓
export PYTHONPATH="./.local/lib/python3.7/site-packages:$PYTHONPATH"
しかし、この方法では、うまく行かなかったです。
↓
$ sudo python
Python 3.7.3 (default, Jul 25 2020, 13:03:44)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/usr/lib/python37.zip', '/usr/lib/python3.7', '/usr/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/dist-packages', '/usr/lib/python3/dist-packages']
>>>
どのようにすればpathを通せるか分かりますでしょうか。
「pip install...」の時に「--user」を付けると、「~/.local」以下に入るようです
https://pyteyon.hatenablog.com/entry/2019/05/24/003924
でも普通は、そこもPythonは見つけてくれるはずだと思うのですが
(インストールに使ったpipが、コード実行するPythonに紐付いてる場合)
ラズパイを再起動して、ログインし直してもインポートできないでしょうか?
(「sys.path.append()」をやらなくても)
出来ました!
ありがとうございました。
$ sudo pip install --user aiohttp
お手数ですが、上記1行を改めて回答に入れてもらえれば、ベストアンサーとさせていただきたいです。
よろしくお願いいたします。
あれ?
これまでに「pip install...」で入ってた
> Requirement already satisfied: aiohttp in ./.local/lib/python3.7/site-packages (3.7.4.post0)
の「./.local/lib/python3.7/site-packages」と、
> sudo pip install --user aiohttp
で入った場所(たぶん「~/.local/...」)は、違う場所なのですか?
てっきり、これまでに入ってた場所(「./.local/lib/python3.7/site-packages」)が、「--user」を付けたら入る場所(「~/.local/...」)だと思ってたのですが
なるほど、、少し難しいです、自分には。
しかし、こういうことでしょうか。
再度以下実行。
↓
pi@raspberrypi:~$ sudo pip install --user aiohttp
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: aiohttp in /root/.local/lib/python3.7/site-packages (3.7.4.post0)
Requirement already satisfied: yarl<2.0,>=1.0 in /root/.local/lib/python3.7/site-packages (from aiohttp) (1.6.3)
Requirement already satisfied: multidict<7.0,>=4.5 in /root/.local/lib/python3.7/site-packages (from aiohttp) (5.1.0)
Requirement already satisfied: chardet<5.0,>=2.0 in /usr/lib/python3/dist-packages (from aiohttp) (3.0.4)
Requirement already satisfied: attrs>=17.3.0 in /root/.local/lib/python3.7/site-packages (from aiohttp) (21.2.0)
Requirement already satisfied: typing-extensions>=3.6.5 in /root/.local/lib/python3.7/site-packages (from aiohttp) (3.10.0.2)
Requirement already satisfied: async-timeout<4.0,>=3.0 in /root/.local/lib/python3.7/site-packages (from aiohttp) (3.0.1)
Requirement already satisfied: idna>=2.0 in /usr/lib/python3/dist-packages (from yarl<2.0,>=1.0->aiohttp) (2.6)
上記の最初のところで、下記のようですね。
> Requirement already satisfied: aiohttp in /root/.local/lib/python3.7/site-packages (3.7.4.post0)
root この辺の意味がわからないですが(T_T)
あ、「sudo」と「--user」を両方付けたのですか
「--user」は「sudo」を付けないでインストールできるようにするためのものなので、普通はそれらを両方付けることはしません
たぶん「sudo」を付けずに
pip install --user aiohttp
を実行したら、
/home/ユーザ名/.local/...
に入ったと思います
> root この辺の意味がわからない
「sudo」と「--user」を両方付けたからそこに入ったのではないですかね
(やったことないので推測ですが)
遅くなりました。
ありがとうございます。
すべてsudo を付けるもんだ、と思い込みつつ、たまに付け忘れていたり、とか、
そもそも自分の理解があいまいだったことが分かりました。
ありがとうございます。無事に解決しました。
しかし、いろいろ最初に戻って入れなおしたくなりました(-_-;)
jbpb0さん
ありがとうございましたm(__)m
$ sudo pip install --user aiohttp
お手数ですが、上記1行を、そのままコピペで良いので、「回答」に入れてもらえれば、ベストアンサーとさせていただきたいです。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー