繁体   English   中英

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

[英]Python on RasPi can't find installed module

我觉得这必须已经被询问和解决,但我找不到适合我的解决方案。 我 pip3'd 了一个 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'

嗯?

当您在没有sudo的情况下运行pip3 install时,package 将安装在/home/pi/.local/lib/python3.7/site-packages下,这是一个用户特定的位置,安装在那里的软件包将无法在系统范围内访问。 然后你运行sudo python3这使你以root用户身份执行python3 ,这是一个不同的用户。

下面我假设您确实需要使用sudo运行命令。 如果您不确定,请尝试删除sudo - 然后导入应该可以工作(但也许其他东西不会 - 我不知道您的脚本中有什么)。

安装 package 以供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 安装非常有用,它们具有自己的独立软件包集,这允许您例如同时使用具有不兼容依赖项集的应用程序(假设 1 个应用程序需要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/的站点包中

在命令行中运行它

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM