Python 在 RasPi 上找不到已安装的模块
Python on RasPi can't find installed module
我觉得这个问题应该已经被询问并解决了,但我找不到适合我的解决方案。我 pip3 了一个 python 库,并验证它确实在我的系统上。
pi@raspberrypi:~/Desktop $ pip3 install pyftpdlib
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: pyftpdlib in /home/pi/.local/lib/python3.7/site-packages (1.5.6)
然后我尝试导入它,但是 raspi 找不到它...
pi@raspberrypi:~/Desktop $ sudo python3 FTPserver2.py
Traceback (most recent call last):
File "FTPserver2.py", line 1, in <module>
import pyftpdlib
ModuleNotFoundError: No module named 'pyftpdlib'
嗯?
当您 运行 pip3 install
没有 sudo
时,软件包将安装在 /home/pi/.local/lib/python3.7/site-packages
下,这是一个用户特定的位置,安装的软件包将无法访问系统-宽的。
然后你 运行 sudo python3
这让你执行 python3
作为 root
用户,这是一个不同的用户。
下面我假设你做需要运行带有sudo
的命令。如果您不确定,请尝试删除 sudo
- 然后导入应该可以工作(但也许其他东西不会 - 我不知道您的脚本中有什么)。
安装 root
使用的软件包的一种方法是 sudo pip3 install pyftpdlib
但不推荐这样做,因为它可能会破坏 [=45= 使用的 Python 安装](有些包可能必须更新才能与 pyftpdlib
兼容,但它们可能会变得与其他东西不兼容,然后你就会遇到很多麻烦)。
最好使用虚拟环境。例如:
# create the virtual environment
$ python3 -m venv env-ftp
# install the package into it
$ env-ftp/bin/python -m pip install pyftpdlib
# run a script using the Python installation contained within the virtual environment
$ sudo env-ftp/bin/python -m Desktop/FTPserver2.py
您也可以选择 source env-ftp/bin/activate
以暂时切换到使用特定于此环境的 python
和 pip
,直到您 deactivate
.
虚拟环境对于创建独立的 Python 安装很有用,它们具有自己独立的软件包集,例如,它允许您同时使用具有不兼容依赖集的应用程序(假设 1 个应用程序需要 requests==2.22.0
,另一个应用程序需要 requests<=2.21.0
,并且不能与 requests==2.22.0
一起使用)。
你能在命令行中尝试运行没有错误吗?:
python3 -c "import pyftpdlib"
如果这个 returns 没有错误,那意味着你的 python 解释器是不同的。确保您没有 运行使用不同的 python 版本 and/or 创建了不同的图像并且没有使用 sudo 权限来安装软件包。
如您所见,pip3
已经安装在/home/pi/.local/lib/python3.7/
的站点包中
运行 这个在命令行里
python3 -c "import site; print(site.getsitepackages())"
并检查它是否 returns 与 pip 相同的路径。
PS:总是建议运行 pip3 install --user
而不是sudo pip3 install
。
我觉得这个问题应该已经被询问并解决了,但我找不到适合我的解决方案。我 pip3 了一个 python 库,并验证它确实在我的系统上。
pi@raspberrypi:~/Desktop $ pip3 install pyftpdlib
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: pyftpdlib in /home/pi/.local/lib/python3.7/site-packages (1.5.6)
然后我尝试导入它,但是 raspi 找不到它...
pi@raspberrypi:~/Desktop $ sudo python3 FTPserver2.py
Traceback (most recent call last):
File "FTPserver2.py", line 1, in <module>
import pyftpdlib
ModuleNotFoundError: No module named 'pyftpdlib'
嗯?
当您 运行 pip3 install
没有 sudo
时,软件包将安装在 /home/pi/.local/lib/python3.7/site-packages
下,这是一个用户特定的位置,安装的软件包将无法访问系统-宽的。
然后你 运行 sudo python3
这让你执行 python3
作为 root
用户,这是一个不同的用户。
下面我假设你做需要运行带有sudo
的命令。如果您不确定,请尝试删除 sudo
- 然后导入应该可以工作(但也许其他东西不会 - 我不知道您的脚本中有什么)。
安装 root
使用的软件包的一种方法是 sudo pip3 install pyftpdlib
但不推荐这样做,因为它可能会破坏 [=45= 使用的 Python 安装](有些包可能必须更新才能与 pyftpdlib
兼容,但它们可能会变得与其他东西不兼容,然后你就会遇到很多麻烦)。
最好使用虚拟环境。例如:
# create the virtual environment
$ python3 -m venv env-ftp
# install the package into it
$ env-ftp/bin/python -m pip install pyftpdlib
# run a script using the Python installation contained within the virtual environment
$ sudo env-ftp/bin/python -m Desktop/FTPserver2.py
您也可以选择 source env-ftp/bin/activate
以暂时切换到使用特定于此环境的 python
和 pip
,直到您 deactivate
.
虚拟环境对于创建独立的 Python 安装很有用,它们具有自己独立的软件包集,例如,它允许您同时使用具有不兼容依赖集的应用程序(假设 1 个应用程序需要 requests==2.22.0
,另一个应用程序需要 requests<=2.21.0
,并且不能与 requests==2.22.0
一起使用)。
你能在命令行中尝试运行没有错误吗?:
python3 -c "import pyftpdlib"
如果这个 returns 没有错误,那意味着你的 python 解释器是不同的。确保您没有 运行使用不同的 python 版本 and/or 创建了不同的图像并且没有使用 sudo 权限来安装软件包。
如您所见,pip3
已经安装在/home/pi/.local/lib/python3.7/
运行 这个在命令行里
python3 -c "import site; print(site.getsitepackages())"
并检查它是否 returns 与 pip 相同的路径。
PS:总是建议运行 pip3 install --user
而不是sudo pip3 install
。