RasPi 上的 Python 找不到已安装的模块



我觉得这个问题已经被提出并解决了,但我找不到一个适合我的解决方案。我导入了一个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,这使得您作为root用户执行python3,这是一个不同的用户。

下面我假设你需要使用sudo执行该命令。如果你不确定,试着放弃sudo-然后导入应该工作(但也许其他东西不会-我不知道你的脚本中有什么)。

安装root使用的包的一种方法是执行sudo pip3 install pyftpdlib,但不建议这样做,因为它可能会破坏操作系统使用的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,以便临时切换到使用特定于此环境的pythonpip,直到您使用deactivate

虚拟环境对于创建具有自己独立包集的独立Python安装非常有用,这允许您同时使用具有不兼容依赖集的应用程序(假设一个应用程序需要requests==2.22.0,另一个需要requests<=2.21.0,并且不能与requests==2.22.0一起工作)。

你能试着在命令行中运行它而不出现错误吗?:

python3 -c "import pyftpdlib"

如果这没有返回错误,这意味着你的python解释器是不同的。请确保您没有运行不同的python版本和/或创建了不同的映像,并且没有使用sudo权限来安装软件包。

可以看到,pip3已经将其安装在/home/pi/.local/lib/python3.7/

的site包中。在命令行中运行

python3 -c "import site; print(site.getsitepackages())"

并检查它是否返回与pip相同的路径。

PS:始终建议运行pip3 install --user而不是sudo pip3 install

相关内容

  • 没有找到相关文章

最新更新