Python: 没有名为 xxx 的模块

Python: No Module named xxx

我的 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/站点包:/home/pi/SkyHD:../ 但是 none 这个作品。我想这一定是一些基本的东西,但我就是无法解决!求助!

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

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

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

同样你可以很容易地把问题简化。如果你这样做 python -m netaddr 会怎样?

显然,在上述命令中,将实际使用的 python 命令替换为 运行 您的脚本。

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

已修复。 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 文件夹中不是问题。 希望这对其他遇到同样问题的人有所帮助。