Python 找不到模块

2023-11-24

给定以下在 PyDev 中创建的 python 项目:

├── algorithms
│   ├── __init__.py
│   └── neighborhood
│       ├── __init__.py
│       ├── neighbor
│       │   ├── connector.py
│       │   ├── __init__.py
│       │   ├── manager.py
│       │   └── references.py
│       ├── neighborhood.py
│       ├── tests
│       │   ├── fixtures
│       │   │   └── neighborhood
│       │   ├── __init__.py
│       └── web
│           ├── __init__.py
│           └── service.py
├── configuration
│   ├── Config.py
│   └── __init__.py
├── __init__.py
└── webtrack
    |- teste.py
    ├── .gitignore
    ├── __init__.py
    ├── manager
        ├── Data.py
        ├── ImportFile.py
        └── __init__.py

我们一直在尝试将模块从一个文件夹导入到另一个文件夹,但没有成功,例如:

from algorithms.neighborhood.neighbor.connector import NeighborhoodConnector

产生结果:

Traceback (most recent call last):
File "teste.py", line 49, in <module>
from algorithms.neighborhood.neighbor.connector import NeighborhoodConnector
ImportError: No module named algorithms.neighborhood.neighbor.connector

我们尝试将其路径附加到 sys.path 变量,但没有成功。

我们还尝试使用 os.walk 将所有路径插入 PATH 变量,但仍然得到相同的错误,即使我们检查 PATH 确实包含查找模块的路径。

我们在 Linux Ubuntu 13.10 上使用 Python 2.7。

我们可能做错了什么吗?

提前致谢,


在运行包内的脚本时正确导入是很棘手的。你可以阅读PEP 395 的这一部分(不幸的是被推迟了)有关无法运行此类脚本的多种方法的描述。

给出一个文件系统层次结构,例如:

top_level/
    my_package/
        __init__.py
        sub_package/
            __init__.py
            module_a.py
            module_b.py
            sub_sub_package/
                __init__.py
                module_c.py
        scripts/
            __init__.py
            my_script.py
            script_subpackage/
                 __init__.py
                 script_module.py

跑步的方法只有几种my_script.py正确工作。

  1. 首先是把top_level文件夹放入PYTHONPATH环境变量,或者使用.pth文件来实现同样的事情。或者,一旦解释器运行,将该文件夹插入到sys.path(但这可能会变得很难看)。

    请注意,您要添加top_level到路径,而不是my_package!我怀疑这就是您当前尝试此解决方案时遇到的麻烦。它很容易出错。

    然后,绝对导入,例如import my_package.sub_package.module_a大部分都会正常工作。 (只是不要尝试导入package.scripts.my_script当它作为__main__模块,否则你会得到该模块的奇怪的重复副本。)

    但是,绝对导入总是比相对导入更详细,因为您始终需要指定完整路径,即使您正在导入同级模块(或“侄女”模块,例如module_c from module_a)。绝对进口,获得方式module_c总是一大堆丑陋的代码from my_package.sub_package.sub_sub_package import module_c无论哪个模块正在执行导入。

  2. 因此,使用相对导入通常更优雅。唉,他们很难按照剧本开始工作。唯一的方法是:

    1. Run my_script来自top_level文件夹与-m标志(例如python -m my_package.scripts.my_script)而不是按文件名。

      如果您位于不同的文件夹中,或者使用不同的方法来运行脚本(例如在 IDE 中按 F5),它将不起作用。这有点不灵活,但实际上没有任何方法可以使它变得更容易(直到 PEP 395 得到取消和实施)。

    2. Set up sys.path就像绝对导入一样(例如添加top_level to PYTHONPATH或其他东西),然后使用PEP 366 __package__字符串告诉 Python 脚本的预期包是什么。也就是说,在my_script.py你想把这样的东西放在所有相对导入之上:

      if __name__ == "__main__" and __package__ is None:
          __package__ = "my_package.my_scripts"
      

      如果您重新组织文件组织并将脚本移动到不同的包,这将需要更新(但这可能比更新大量绝对导入的工作量要少)。

    一旦您实施了其中一种解决方案,您的导入就会变得更加简单。输入module_c from module_a变成from .sub_sub_package import module_c. In my_script,相对进口如from ..subpackage import module_a就会起作用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 找不到模块 的相关文章

随机推荐

  • 装饰器的类型注释

    这不是一个大问题 但我只是想知道解决这个问题的方法 由于我刚开始在Python上使用函数注释 所以我不熟悉它 我有一个问题如下 当你制作一个装饰器并想在其上添加注释时 你该怎么做 例如 如下代码 def decorator func Cal
  • NCO:使用 NCO ncks 从 NetCDF 文件中提取变量

    我试图通过输入以下命令从多变量 netcdf 文件中提取变量 ncks v ta temp1 nc out nc 然而 当我查看 out nc 标头时 所有变量仍然存在 temp1 nc 和 out nc 的标头如下 temp1 nc he
  • 在布局 xml 中设置 Magento 块模板

    在 Magento 的布局 xml 中设置块模板时遇到问题 我试图设置子块的模板 而不是整个页面布局 几乎所有文档都解释了如何设置布局模板 背景 我是updating我的自定义操作中的布局句柄 使用
  • GraphQL 查询在 Gatsby 页面中有效,但在类组件中无效

    有几个类似的问题 但除了页面文件夹中的组件之外 没有一个问题可以帮助我真正理解在 类 组件中使用 GraphQL 我的项目结构如下所示 src components aboutBody index js pages about js 我有一
  • 如何检测单个文件的文件系统大小限制

    有没有办法检测单个文件的文件系统大小限制 例如 fat 32 上的 4GB 它必须在 Windows 操作系统上运行 但最好是便携式解决方案 检测文件系统类型可能是一种解决方法 但我也不知道如何做到这一点 有人可以帮我吗 先感谢您 托比亚斯
  • Typescript 编译为单个文件

    我正在使用 TS 1 7 我正在尝试将我的项目编译为一个大文件 我将能够将其包含在我的 html 文件中 我的项目结构如下所示 build Build directory src source root main ts my Main fi
  • 将函数转换为使用尾递归——一项正式研究

    有没有人写过一篇正式论文描述一种 自动 将函数转换为尾递归的方法 我正在寻找大学级别的正式处理 包括限制 可以转换的函数类型 转换程序 以及 如果可能 正确性证明 Haskell 中的例子将是一个额外的好处 一种 自动 将函数转换为尾递归的
  • 在 iPhone 上“解压”文件

    我正在编写一个 iPhone 应用程序 它从网络服务器下载一个 tar gzip 压缩文件 然后需要取消存档该文件 以便可以将其复制到应用程序的 Documents 文件夹中 我使用 tar gzip 是因为我想在一个 HTTP 请求中下载
  • 在WebView Metro Style应用程序中加载本地html文件

    我在 Metro 风格应用程序的 WebView 控件中加载 html 文件时遇到了一些问题 我一直在互联网上搜索 发现无法使用 NavigateTo 方法加载本地 html 文件 我还发现有一种解决方法 您可以使用控件的 Navigate
  • 如何计算 Objective-C 中特定日期的一年中的第几天?

    这是我发现自己花了几个小时才弄清楚的事情 因此想与大家分享 问题是 如何确定特定日期是一年中的哪一天 例如当不是闰年时 1月15日是第15天 12月31日是第365天 尝试这个 NSCalendar gregorian NSCalendar
  • 复合类型数组的正确语法

    CREATE TYPE pencil count AS pencil color varchar 30 count integer CREATE TABLE pencils id serial pencils pencil count IN
  • ggplot2 按组绘制曲线下阴影面积

    我正在尝试对两条曲线下的区域进行着色 我想得到与中完全相同的图 尽管没有阈值 上一篇文章 唯一的区别是我想使用geom line 代替stat density 有什么办法可以做到这一点吗 提前致谢 我已经尝试过该帖子中建议的方法 但是当我使
  • 我应该向 App Store 发布一个包含打印语句的应用程序吗?

    我打算很快将我的应用程序发布到 App Store 在 TestFlight 之后 我有很多视图控制器print其中的陈述 这print语句用于测试目的 调试器 用户永远不会看到它们 发布后 如果我在应用程序中包含或不包含打印语句 会有什么
  • 如何发布选择列表中的所有选项?

    我有一个选择多个列表 其中包含一些项目 它是 ACL 的 IP 地址列表 人们可以添加 删除 IP 然后保存列表 但是 除非您选择列表中的某个项目 POST selectName 不包含任何值 我怎样才能做到这一点 我知道我可以用 java
  • Matlab/CUDA:海浪模拟

    我学过 模拟海水 Jerry Tessendorf 的文章并尝试对统计波模型进行编程 但我没有得到正确的结果 我不明白为什么 In my program I tried only to create a wave height field
  • Azure 移动 Web 服务测试页的身份验证

    开发 Azure 移动服务时 我可以在本地运行时运行测试页面 如果我按下 尝试 按钮 我可以测试我的 api 但是当发布到 Azure 时 我需要进行身份验证才能使用 尝试 按钮 我的问题是测试页发布到云端时的用户名和密码是什么 据我所知
  • ListView ManipulationCompleted 事件在手机上不起作用

    我在 Windows 10 UWP 应用程序中有以下代码 MyListView ManipulationMode ManipulationModes TranslateX MyListView ManipulationStarted s e
  • 如何在android中的sqlite中实现一对多对象数据库

    我很新SQLite and SQL我正在努力解决以下问题 我的应用程序将显示社区成员列表 如果我点击某个成员 我可以看到该成员发布的帖子列表 帖子是一个包含名称 时间和消息的对象 我怎样才能将其存储在SQLite数据库 以便我可以通过以下方
  • 阴影穿透后代组合器 '/deep/' ,包括 '::shadow' 伪元素,已被弃用,那么我们如何穿透 Shadow DOM?

    假设我们有一些 CSS 代码 例如动画 CSS 加载器 我们希望在所有使用 Shadow DOM 的 Web 组件中使用它 如果我们无法像使用 Shadow DOM 那样穿透 Shadow DOM 我们如何重新使用这个 CSS 代码 sha
  • Python 找不到模块

    给定以下在 PyDev 中创建的 python 项目 algorithms init py neighborhood init py neighbor connector py init py manager py references p