无法导入模块

2023-12-25

首先,这很可能不是路径问题。

我在 eclipse 中有一个 pydev 项目。这是目录结构:

Genetic-Framework
  | Genetic-Framework
    | Genetic
      | __init__.py
      | GA.py
      | crossover.py
      | fitness.py
      | individual.py
      | mutation.py
      | population.py
      | selection.py
      | settings.py
      | visualization.py

In GA.py,我有以下行:

from Genetic import settings, selection, visualization as vis

是的,Genetic is in sys.path。但是,我收到以下错误:

  File "/.../Genetic-Framework/Genetic-Framework/Genetic/GA.py", line 17, in <module>
    from Genetic import settings, selection, visualization as vis
ImportError: cannot import name settings

但是,当我删除settings从这条线上,其他一切都进口得很好。

有趣的是,在第一行中settings.py这是:

from Genetic import fitness, selection, mutation, crossover, population, GA

当我删除时GA从这一点来看,一切似乎都很顺利。

为什么我会收到此错误?这是循环导入的问题吗?我怎样才能解决这个问题?


是的,这是循环导入的问题。

问题

问题是当你的GA.py运行时,它首先尝试导入settings。这意味着settings.py开始运行,它立即尝试导入GA.

然而,GA已经在加载过程中,所以GA.py不会第二次运行 - 相反,settings只是加载GA它已经在内存中(目前大部分是空的,因为它仍在执行导入)。

因此,事物在settings尝试使用的东西GA失败,因为他们正在寻找的东西GA尚未定义(因为处理GA.py尚未通过进口)。

这使得评价settings.py引发异常,表现为导入失败(因为导入期间引发的异常导致导入失败)。

解决方案

a) 首先避免出现这种情况。

一般来说,您应该首先尝试避免循环导入。它们通常意味着您有非常奇怪的依赖结构,以后很难调试。

实现此目的的一种方法是尝试找到两个模块中所需的内容,并将它们分解为可以在其他两个模块之间共享的单独的第三个模块 - 因此,您不必在 B 中使用 A.x,在 A 中使用 B.y在 A 和 B 中都使用 C.x 和 C.y。

b) 在所有内容都加载之前,不要真正尝试使用循环导入中的内容。

您可以做的另一件事是推迟使用另一个模块中的某些内容,直到所有导入完成之后。换句话说,不要尝试从顶级代码引用导入模块的内容,而是将其放置在类初始值设定项或稍后可以在所有导入完成后调用的函数中。

例如,而不是这个...

import Foo

class Baz:
    top_level_variable = Foo.bar

你可以这样做:

import Foo

class Baz:
    def __init__(self):
        self.instance_variable = Foo.bar

显然,实例属性与类属性略有不同,但其想法是推迟实际上必须从其他模块查找内容,直到所有模块完成执行并因此其内容可用为止。另请注意from Foo import bar在这里会失败,因为它尝试访问的内容Foo在导入时,这是需要避免的。

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

无法导入模块 的相关文章

  • setColumnStretch 和 setRowStretch 如何工作

    我有一个使用构建的应用程序PySide2它使用setColumnStretch用于柱拉伸和setRowStretch用于行拉伸 它工作得很好 但我无法理解它是如何工作的 我参考了 qt 文档 但它对我没有帮助 我被困在括号内的两个值上 例如
  • 用于读取类似 CSV 行的 Python 正则表达式

    我想解析传入的类似 CSV 的数据行 值用逗号分隔 逗号周围可能有前导和尾随空格 并且可以用 或 引用 例如 这是有效的行 data1 data2 data3 data4 data5 但这是格式错误的 data1 data2 da ta3
  • Python:由于 OSError 无法安装软件包:[Errno 2] 没有这样的文件或目录

    我尝试使用pip安装sklearn 并且我收到以下错误消息 错误 由于 OSError 无法安装软件包 Errno 2 没有这样的文件或目录 C Users 13434 AppData Local Packages PythonSoftwa
  • 如何搜索一列并用找到的内容填充另一列?

    我有一个带有虚构人物数据的大熊猫数据框 下面是一个小例子 每个人都由一个数字定义 import pandas as pd import numpy as np df pd DataFrame Number 5569 3385 9832 64
  • FastAPI UploadFile 与 Flask 相比慢

    我创建了一个端点 如下所示 app post report upload def create upload files files UploadFile File try with open files filename wb as wf
  • Python MySQLdb:connection.close() VS。光标.close()

    如果我使用MySQLdb通过Python连接到MySQL Server 我创建一个connection and a cursor像这样 connection MySQLdb connect cursor connection cursor
  • 如何使用 Python 在表单中选择选项?

    我想知道如何以格式如下的形式选择选项 td align left td
  • Python 模块 BeautifulSoup 提取锚点 href

    我正在使用 BeautifulSoup 模块通过以下方式从 html 选择所有 href def extract links html soup BeautifulSoup html anchors soup findAll a print
  • 私有属性,但却是一个神秘的领域

    我想将属性设为私有 但带有 pydantic 字段 from pydantic import BaseModel Field PrivateAttr validator class A BaseModel a str I want a py
  • 使用最新值进行采样

    考虑以下系列 created at 2014 01 27 21 50 05 040961 80000 00 2014 03 12 18 46 45 517968 79900 00 2014 09 05 20 54 17 991260 636
  • 如何在 tkinter 后台运行函数[重复]

    这个问题在这里已经有答案了 我是 GUI 编程新手 我想用 tkinter 编写一个 Python 程序 我想要它做的就是在后台运行一个可以通过 GUI 影响的简单函数 该函数从 0 计数到无穷大 直到按下按钮为止 至少这是我想要它做的 但
  • 使用张量流导出神经网络的权重

    我使用张量流工具编写了神经网络 一切正常 现在我想导出神经网络的最终权重以制定单一的预测方法 我怎样才能做到这一点 您需要在训练结束时使用以下命令保存模型tf train Saver https www tensorflow org ver
  • 在 Keras 中使用有状态 LSTM 训练多变量多级数回归问题

    我有时间序列P过程 每个过程的长度各不相同 但都有 5 个变量 维度 我试图预测测试过程的估计寿命 我正在用有状态的方法来解决这个问题LSTM在喀拉斯 但我不确定我的训练过程是否正确 我将每个序列分成长度的批次30 所以每个序列都是这样的形
  • PySpark DataFrame 上分组数据的 Pandas 式转换

    如果我们有一个由一列类别和一列值组成的 Pandas 数据框 我们可以通过执行以下操作来删除每个类别中的平均值 df DemeanedValues df groupby Category Values transform lambda g
  • Eclipse 在单独的窗口中打开代码

    我正在 eclipse 中编程 在两个显示器设置上运行 在其中一台显示器上 我只获得了项目资源管理器和编辑器作为自定义透视图 而在另一台显示器上 我获得了其他工具 例如控制台 调试 任务 变量 断点等 例如 当我单击任务视图中的任务时 这将
  • 数据类和属性装饰器

    我一直在阅读 Python 3 7 的数据类 作为命名元组的替代品 我通常在必须将数据分组到结构中时使用它 我想知道数据类是否与属性装饰器兼容 以便为数据类的数据元素定义 getter 和 setter 函数 如果是这样 是否在某处进行了描
  • 如何使用 QAbstractTableModel(模型/视图)将数据设置到 QComboBox?

    我希望能够设置itemData of a combobox当使用填充时QAbstractTableModel 但是 我只能从模型返回一个字符串data method 通常 当不使用模型时 可以像这样执行 Set text and data
  • 如何通过 API Gateway 使用事件调用类型调用 Lambda 函数?

    文件说 默认情况下 Invoke API 采用 RequestResponse 调用类型 您可以选择通过将 Event 指定为 InitationType 来请求异步执行 因此 我可以发送到我的函数 python 的就是到处都是 Inspi
  • 阻止 BeautifulSoup 将我的 XML 标签转换为小写

    我正在使用 BeautifulStoneSoup 来解析 XML 文档并更改一些属性 我注意到它会自动将所有 XML 标签转换为小写 例如我的源文件有
  • Python 子进程:无法转义引号

    我知道以前曾问过类似的问题 但它们似乎都是通过重新设计参数的传递方式 即使用列表等 来解决的 但是 我这里有一个问题 因为我没有这个选项 有一个特定的命令行程序 我使用的是 Bash shell 我必须向其传递带引号的字符串 它不能不被引用

随机推荐

  • “next/font”需要 SWC,尽管由于存在自定义 babel 配置而正在使用 Babel

    当我尝试使用样式组件运行 Nextjs 项目时 我遇到了此错误 这是我的 babelrc plugins babel plugin styled components ssr true displayName true presets ne
  • java中的immutable和final有什么区别?

    最近有人问我这个问题 但无法简明地解释这两个概念到底有何不同 例如 最终且不可变 final String name John 如果我现在写 name Sam 我会得到一个编译器错误 不可变 String name John name Sa
  • SSRS 2005 如何打印 4" X 3" 标签为纵向..SSRS 假定为横向

    我有一份 SSRS 2005 报告表单 正在打印到 Zebra ZDesigner TLP 2844 Z 标签打印机 交互和页面尺寸设置为 4 英寸宽 x 3 英寸高 由于 SSRS 中没有纸张方向 因此当它应该是纵向报告时 它会假设这是横
  • 在 Hudson 重新运行期间首先运行失败的测试

    我在哈德逊有一份长期运行的单元测试工作 如果某些测试失败 我想先运行它们 而不是等待其他测试在它们之前运行 看看我是否修复了它们 可以在哈德逊设置吗 谢谢 我之前也遇到过同样的问题 这是我的解决方案 您可以编写一个独立程序来运行单元测试用例
  • 在nodejs解密中出现错误(错误:不支持的状态或无法验证数据)

    我在 java 中使用 AES GCM NoPadding 算法 AES 256 加密了一条消息 并尝试在 NodeJs 中解密它 出现异常 错误 状态不受支持或无法验证数据 同时解密 下面是java和nodejs的完整代码以及错误信息 请
  • ASP.NET Core:[FromQuery]用法和URL格式

    我正在尝试在我的 Web api 中使用 FromQuery 但我不知道如何使用它 这是控制器中的 GetAllBooks 方法 HttpGet Route api v1 ShelfID shelfID BookCollection pub
  • Open Office xml SDK 异常“无法插入 OpenXmlElement“newChild”,因为它是树的一部分”

    我正在使用 open office sdk 2 0 生成一个 word 文档 我遇到的异常是 无法插入 OpenXmlElement newChild 因为它是树的一部分 我知道异常是由于尝试 xml 中的重复节点造成的 但我不知道如何修复
  • 在 Chromium 中使用 WebCrypto 生成 RSA 密钥对

    以下代码适用于 Firefox 76 0 1 use strict let RSAKeys async gt RSAKeys await crypto subtle generateKey name RSA OAEP modulusLeng
  • node_modules 中的 webpack 4 图像:找不到模块

    问题 我使用 webpack 4 将 scss 编译为 css 并使用 MiniCssExtractPlugin 将 css 保存到不同的文件中 问题是 我无法加载通过 url 包含在 scss 文件内的图像和字体 运行开发或生产之间也没有
  • 如何初始化一个大小由 argc 和 argv 确定的二维数组?

    我正在编写代码 该代码将跟踪每次访问数组中的特定元素时的情况 数组本身将根据用户的输入动态分配 因此我所看到的函数都不是我正在寻找的 更具体地说 如何动态分配数组的行和列 然后将每个元素初始化为 0 前任 SIM A B int array
  • curl_multi_exec 显示不同的运行

    我只使用curl multi exec 来处理5 个url 现在我有这个奇怪的问题 当我在 xampp 上运行我的代码时 它运行完美 我可以看到 running 值初始化为 5 然后不断减少 但是 当我在其他本地主机 在arm架构上 上尝试
  • 使用 WebGL 索引缓冲区绘制网格

    3 个索引缓冲区 https stackoverflow com questions 2696182 3 index buffers问了一个更困难的问题 但我觉得他们的主要问题归结为我的 有没有办法使用索引缓冲区在 WebGL 中多次访问同
  • pyinstaller编译的文件有ssl问题,错误:185090050

    我有一些 python 代码可以在我的 Windows 机器上的 python ide 和 cmd 提示符下成功运行 当我用 pyinstaller 编译 到一个文件中 后 我收到以下错误 Traceback
  • flot.js - 位置垂直刻度,但被切断并居中

    我使用 flot js 绘制 x 轴上带有时间戳的图表 由于我在这些图表上会有很多刻度 所以我垂直旋转它们 这样它们就不会重叠 这工作正常 但标签集中在刻度上 并且没有提供足够的空间 因此它们被切断 我没有使用ticrotor插件滴答声 h
  • UDP/TCP 打洞 vs UPnP vs STUN vs?

    我尝试制作一个 P2P 程序 需要帮助来穿越客户端的 NAT 我在 stackoverflow 上读过很多问题 但我从来不知道通过 NAT 的所有方法的缺点和优点是什么 有多少路由器支持哪些方法 大公司常用哪些方法 BitTorrent T
  • OSError:输入/输出错误 - Google Colab

    Using h5py File path r 或 喀拉斯 model load weights path on h5文件产生以下错误 我已经在 Colab 上训练模型几个月了 从来没有遇到过这个问题 从云端硬盘下载后 相同的文件在我的计算机
  • 使用 graphql 公开动态模式

    我的应用程序动态处理模式 用户可以上传新域或更改现有域的定义 例如 我发布的产品具有如下用户模式 user fn ln age Later user can change this definition to include new pro
  • 在 C++ 中修改后修复文件权限?

    我将数据保存在程序的可执行文件中 我将其复制到临时文件中 覆盖从 a 开始的部分 神奇的字符串 并将其重命名为原来的 我知道这是一个坏主意 但我这样做只是为了实验 到目前为止 一切正常 除了每次替换文件时我必须重新启用 允许作为可执行文件运
  • 远程检查交换凭据并检查登录的用户

    我曾尝试过这一点 但没有取得多大成功 基本上我需要使用 EWS 远程登录 Exchange 问题是我不知道用户是否已正常登录 或者凭据是否错误 因为我没有得到任何回报 如果我提供了错误的凭据 软件就会继续运行 我是否遗漏了一些东西 我已经检
  • 无法导入模块

    首先 这很可能不是路径问题 我在 eclipse 中有一个 pydev 项目 这是目录结构 Genetic Framework Genetic Framework Genetic init py GA py crossover py fit