【问题标题】:Python: No Module named xxxPython:没有名为 xxx 的模块
【发布时间】:2018-10-22 01:20:08
【问题描述】:

在我的 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(and 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:../ 但这些都不起作用。我想这一定是一些基本的东西,但我就是无法解决!帮忙!

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

【问题讨论】:

  • 我了解您both Python 2.7 Python 3.5 站点包文件夹same PYTHONPATH 变量?如果是这样,那真的不是一个好主意。
  • 好的,感谢您提供的信息,但这会导致我的问题吗?我不知道怎么做。
  • 不能吗? Python 2.7 在路径中排在第一位,因此如果 Python 3 正在寻找特定模块,它将首先在 Python 2.7 目录中查找,因此它将获得 该模块的 Python 2 版本,这可能不会与 Python 3 兼容。这不仅仅是自找麻烦,而是乞求
  • 但是错误说它找不到任何版本的模块,所以你建议的是我同意的好习惯,但不会解决问题。
  • 在你尝试之前你不能这么说。但适合自己。

标签: python module module-path


【解决方案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 文件夹不是问题。 希望这可以帮助其他有同样问题的人。

【讨论】:

    【解决方案2】:

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

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

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

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

    而且,正如@BoarGules 在他的 cmets 中提到的那样,你永远不应该,永远为不同的 python 版本添加目录到PYTHONPATH,除非你知道这些目录中的模块已经被写入与 python2 和 python3 一起工作。

    【讨论】:

      猜你喜欢
      • 2021-10-07
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      • 2021-06-10
      • 2017-12-30
      • 1970-01-01
      • 2019-01-12
      • 1970-01-01
      相关资源
      最近更新 更多