1

我的 Raspberry Pi 上出现以下错误,我一无所获:

我自己的 Python 脚本从另一个名为 BlackBean.py 的模块调用一个函数,该模块又导入名为“netaddr”和“configparser”的其他模块。问题是我似乎无法克服导入错误,它告诉我“没有名为 netaddr 的模块,或者如果我注释掉该导入,那么它也会在没有名为 configparser 的模块的情况下出错。所以我知道这是一个路径问题,但我只是似乎无法修复它!

Blackbean.Py 脚本的开头是这样的:

import broadlink
import ConfigParser
import sys, getopt
import time, binascii
import netaddr
import BlackBeanSettings
import re
from os import path
from Crypto.Cipher import AES

SettingsFile = ConfigParser.ConfigParser()
SettingsFile.optionxform = str
SettingsFile.read(BlackBeanSettings.BlackBeanControlSettings)

def execute_command(etc.........

BlackBean.py 文件位于我的项目 SkyHD 文件夹中,位于 /home/pi/SkyHD。“netaddr”和“configparser”文件和文件夹由 pip 安装在 /home/pi/.local/lib/python2.7(和 python3.5)/site-package 文件夹中。

sys.path 在其列表中有上述文件夹,我还编辑了 .bashrc 并添加了 PYTHONPATH=${PYTHONPATH}:/home/pi/.local/lib/python2.7/site-package:/home/pi/.local /lib/python3.5/site-package:/home/pi/SkyHD:../ 但这些都不起作用。我想这一定是一些基本的东西,但我就是无法解决!帮助!

此外,还有更多信息,当我第一次安装所有文件并运行我的程序时,一切正常,它发现文件没问题,只有当我重新启动时它才找不到文件。

4

2 回答 2

1

它是固定的。Python 在 3 个地方查找导入的模块,第一个是您启动 Python 脚本的文件夹;所以对我来说,显而易见的答案是将我需要的模块直接导入我自己的项目文件夹(/home/pi/myproject)。这工作得很好,即使在重新启动后每次都能正常工作,这是我之前的主要问题。无需创建或更改 PYTHONPATH,无需弄乱 .bashrc 中的条目或尝试更改 python 路径条目。以下是步骤:将 PIP 升级到版本 9.0.3(不是版本 10)

pip install --upgrade pip==9.0.3

然后使用以下内容安装所需的模块

pip install --target=/home/pi/your_project_folder module_name

所以对我来说是... pip install --target=/home/pi/SkyHD netaddr

我确定这不是最佳实践,但我的 Raspberry Pi 只有一个项目可以运行,并且将模块导入 Projects 文件夹并不是问题。希望这可以帮助其他有同样问题的人。

于 2018-05-25T11:29:42.497 回答
0

您提供的信息不足。具体来说,有关python用于运行脚本的命令的详细信息,例如其版本 ( python -V) 及其模块搜索路径(如果您这样做)

env -u PYTHONPATH python -c 'import sys; print(sys.path);'

同样,您可以轻松地简化问题。如果你这样做会发生什么python -m netaddr

显然,在上面的命令中替换了用于运行脚本的实际 python 命令。

而且,正如@BoarGules 在他对您的问题的评论中提到的那样,您永远不应该不同的python 版本添加目录,PYTHONPATH除非您知道这些目录中的模块已被编写为与python2 和python3 一起使用。

于 2018-05-12T04:30:18.037 回答