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 以暂时切换到使用特定于此环境的 pythonpip,直到您 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