有关 python ImportError 的更多信息,没有命名的模块

2024-01-29

遵循建议here https://stackoverflow.com/questions/338768/python-importerror-no-module-named,我的包(或包含我的模块的目录)位于 C:/Python34/Lib/site-packages。该目录包含一个__init__.py and sys.path包含如图所示的目录路径。

我仍然收到以下错误:

Traceback (most recent call last):
  File "C:/Python34/Lib/site-packages/toolkit/window.py", line 6, in <module>
    from catalogmaker import Catalog
  File "C:\Python34\Lib\site-packages\toolkit\catalogmaker.py", line 1, in <module>
    from patronmaker import Patron
  File "C:\Python34\Lib\site-packages\toolkit\patronmaker.py", line 4, in <module>
    class Patron:
  File "C:\Python34\Lib\site-packages\toolkit\patronmaker.py", line 11, in Patron
    patrons = pickle.load(f)
ImportError: No module named 'Patron'

我在 patronmaker.py 中有一个名为“Patron”的类,但没有名为 Patron 的模块,所以我不确定错误消息中的最后一条语句的含义。我非常感谢你对我所缺少的东西的想法。

Python 版本 3.4.1在 Windows 32 位机器上。


您正在保存所有顾客实例(即self)到Patron类属性Patron.patrons。然后您尝试从类中pickle 类属性。这会让人窒息pickle,然而我相信dill应该能够应付。是否真的有必要将所有类实例保存到 Patrons 的列表中?这样做有点奇怪……

pickle通过引用序列化类,并且不能很好地使用__main__对于许多物体。在dill,您不必通过引用序列化类,并且它可以处理以下问题__main__, 好多了。得到dill here: https://github.com/uqfoundation https://github.com/uqfoundation

Edit:我尝试了你的代码(做了一个小小的更改)并且它有效。

dude@hilbert>$ python patronmaker.py

然后启动Python...

>>> import dill
>>> f = open('patrons.pkl', 'rb')
>>> p = dill.load(f)
>>> p
[Julius Caeser, Kunte Kinta, Norton Henrich, Mother Teresa]

我所做的唯一更改是取消注释末尾的行patronmaker.py这样它就拯救了一些顾客……我也更换了import pickle with import dill as pickle到处。

因此,即使通过下载并运行您的代码,我也不会产生错误dill。我用的是最新的dill来自github。

附加编辑:您上面的回溯来自ImportError。你安装你的模块了吗?如果您没有使用 setup.py 来安装它,或者您的模块上没有PYTHONPATH,那么无论您如何序列化事物,您都找不到您的模块。

更多编辑:查看您的代码,您应该使用单例模式 for patrons…它不应该在里面class Patron。类级别的代码块,用于将顾客加载到其中Patron.patrons肯定会引起问题……并且可能必然是某种形式错误的根源。我还看到你正在酸洗属性Patrons.patrons(甚至不是类本身)从内部Patrons班级 -这太疯狂了——别这样做。另请注意,当您尝试获得订阅会员时,您可以使用Patron.patrons…这是调用类对象而不是实例。将订阅者移到类之外,并直接使用单例作为订阅者列表。此外,您通常应该使用顾客实​​例,因此如果您想让每个顾客知道所有其他顾客是谁,p = Patron('Joe', 'Blow'), then p.patrons得到所有顾客......但你需要写一个Patrons.load读取单例顾客列表的方法......你也可以使用property使load给你一些看起来像属性的东西。

如果您构建一个单一的顾客(作为列表)......或者如果您愿意的话,建立一个顾客“注册表”(作为字典),那么只需检查顾客pickle文件是否存在......加载到注册表......并且不要这样做从赞助人班级内部开始……事情应该会好得多。您的代码当前正在尝试在类定义上加载类实例,而它builds那个类对象。那很糟...

另外,当您没有提供最小的测试用例或有关如何创建回溯的足够信息时,不要指望人们会下载您的代码并为您调试。 你may遇到了有效的酸洗错误dill对于一些黑暗的角落情况,但我不能告诉 b/c 我无法重现你的错误。但是,我可以看出您需要一些重构。

明确地说:

将您的顾客初始化混乱从顾客转移到新文件中patrons.py

import os
import dill as pickle

#Initialize patrons with saved pickle data
if os.path.isfile('patrons.pkl'):
    with open("patrons.pkl", 'rb') as f:
        patrons = pickle.load(f)
else: patrons = []

然后在 pattonmaker.py 中,以及其他任何你需要单例的地方......

import dill as pickle
import os.path
import patrons as the

class Patron:

    def __init__(self, lname, fname):
        self.lname = lname.title()
        self.fname = fname.title()
        self.terrCheckedOutHistory = {}
        #Add any created Patron to patrons list
        the.patrons.append(self)
        #Preserve this person via pickle
        with open('patrons.pkl', 'wb') as f:
            pickle.dump(the.patrons, f)

除非您的代码遇到模块上的属性无法序列化的情况之一,否则您应该没问题,因为它们是动态添加的(请参阅https://github.com/uqfoundation/dill/pull/47 https://github.com/uqfoundation/dill/pull/47),这绝对应该使pickle失败,并且在某些情况下dill太……可能有一个AtrributeError在模块上。我只是无法重现这个……我已经完成了。

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

有关 python ImportError 的更多信息,没有命名的模块 的相关文章

随机推荐

  • 带请求正文的 Elasticsearch GET 请求

    将请求正文与 GET 请求一起传递不是违反 REST 风格的方法吗 例如在Elasticsearch中过滤一些信息 curl localhost 9200 megacorp employee search d query filtered
  • iTextSharp 5 波兰语字符

    我在使用 itextSharp 处理波兰语字符时遇到问题 我想从 html 创建 pdf 一切都很好 但缺少波兰特色 我使用较低的功能 private void createPDF string html MemoryStream msOu
  • 在 Common Lisp 中替换列表中的项目?

    我有一个事物列表 我称之为 L 一个索引 N 和一个新事物 NEW 如果我想用 NEW 替换 L 中 N 中的内容 最好的方法是什么 我是否应该获取到 N 的子列表以及从 N 到列表末尾的子列表 然后使用列表将第一部分 NEW 和最后一部分
  • Prometheus 标签与矢量时间戳的比较

    我有一个像 T V label UTCtimestamp 这样的向量 其中 label UTC 时间戳字符串 我想找到具有类似标签的所有向量的计数 T 1day 其中 T 是 Vector 被推送的时间戳 我正在寻找一些查询 例如 V T
  • C++11 外部模板:我们在哪里真正需要它们?

    在 C 03 中我们有模板显式实例化定义 template class Foo
  • 从 USB 可移动存储读取文件

    在我的应用程序中 我想从 USB 可移动存储读取文件 我有一个 txt 我想阅读它 void read UsbManager manager UsbManager getSystemService Context USB SERVICE H
  • 我们如何处理快速增长得非常大的交集表?

    例如 我们有表A和表B 它们之间存在多对多关系 表 C 是一个交集表 存储 A id 和 B id 以及表示两者之间关系的值 或者作为一个具体的例子 想象一下 stackexchange 有一个用户帐户 一个论坛和一个业力分数 或者 一个学
  • 如何在 1.6 中禁用 JTable 中的所有排序代码

    我有一个 JTable 扩展 自 Java 1 3 1 4 以来一直在项目中使用 它提供了列重新排序和通过单击列进行排序等功能 我们正在升级到 Java 1 6 新的 JTable 会停止旧的排序代码的工作 要使所有内容都适合新的 JTab
  • 使用 DirectShow.NET 的音频同步问题

    我已经在 DirectShow NET 论坛上启动了一个主题 这里是链接http sourceforge net projects directshownet forums forum 460697 topic 5194414 index
  • mat-paginator 更改 mat-paginator-range-label 的放置

    我有一个简单的mat table with mat paginator By default design it looks like this 我想更改范围标签的放置并将其放在导航按钮之间 如下所示 基本上 我需要移动div mat pa
  • 如果执行的 JavaScript 进入无限循环,Android WebView 将进入不可恢复状态

    如果执行的 JavaScript 代码陷入无限循环 Android WebView 小部件似乎会进入不可恢复的状态 例如这个网页就会导致这个问题 Failure Test 只需使用 WebView 在任何 Android 浏览器中输入以下
  • R 连接到 sqlite

    我无法从 R 连接到 sqlite Sqlite3 安装在 Linux 服务器上并且能够创建 修改 但 R 未连接 library dplyr library RSQLite gt db lt src sqlite my db sqlite
  • 后台线程上的领域通知令牌

    我试图在后台线程上获取领域数据并添加通知块 iOS Swift 基本示例 func initNotificationToken DispatchQueue global qos background async let realm try
  • React-leaflet:添加 TopoJSON 层

    我刚刚开始使用 React leaflet 库并获得了一个要加载 geoJSON 层的地图 但是我想使用 TopoJSON 层 我知道这样的纯传单是可能的 https gist github com rclark 5779673 https
  • Visual Studio 解决方案中建议的项目数量

    我们正在开始开发新的应用程序 其中包括大约 12 名开发人员在 MS Visual Studio 中使用 C 开发的 30 50 个项目 我正在致力于应用程序模块的组件化 以支持架构并实现并行工作 我们争论 我们应该有多少种解决方案 有人声
  • ORM 和层

    很抱歉这一点在这里到处都是 但我感觉就像一只狗在追我的尾巴 此时我很困惑 我试图找到开发 3 层解决方案 IL BL DL 的最简洁方法 其中 DL 使用 ORM 来抽象对数据库的访问 在我见过的所有地方 人们都使用 LinqToSQL 或
  • Java 游戏引擎 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我最近一直在研究游戏开发 我的第一个编程语言是 Java 在玩过许多用 C 开发的令人惊叹的游戏后 我想知道为什么 Java 在游戏行
  • 如何在Github上托管gem并使用它?

    我已将私有 gem 文件添加到新存储库中here https github com praveenitmec testgem但是当我尝试将它添加到我的 gem 文件中时 gem test gem git gt https github co
  • jQuery 禁用链接

    任何人都知道如何禁用 jquery 中的链接而不使用return false 具体来说 我想要做的是禁用某个项目的链接 使用 jquery 执行单击它会触发一些内容 然后重新启用该链接 以便再次单击它时它会默认工作 谢谢 戴夫 UPDATE
  • 有关 python ImportError 的更多信息,没有命名的模块

    遵循建议here https stackoverflow com questions 338768 python importerror no module named 我的包 或包含我的模块的目录 位于 C Python34 Lib si