更改模块目录后的 Python pickle

2023-12-03

我最近更改了程序的目录布局:之前,我将所有模块都放在“main”文件夹中。现在,我已将它们移动到以程序命名的目录中,并放置了一个__init__.py在那里制作一个包裹。

现在,我的主目录中有一个 .py 文件,用于启动我的程序,这更加简洁。

不管怎样,尝试从我的程序的早期版本加载腌制文件失败了。我收到“ImportError:没有名为工具的模块” - 我猜这是因为我的模块以前位于主文件夹中,现在位于 Whyteboard.tools 中,而不仅仅是普通的工具。但是,在工具模块中导入的代码与其位于同一目录中,因此我怀疑是否需要指定一个包。

所以,我的程序目录看起来像这样:

whyteboard-0.39.4

-->whyteboard.py

-->README.txt

-->CHANGELOG.txt

---->whyteboard/

---->whyteboard/__init__.py

---->whyteboard/gui.py

---->whyteboard/tools.py

Whyteboard.py 从 Whyteboard/gui.py 启动一段代码,从而启动 GUI。在目录重新组织之前,这个酸洗问题肯定不会发生。


As pickle 的文档比如说,为了保存和恢复类实例(实际上也是一个函数),您必须遵守某些约束:

pickle 可以拯救和恢复阶级 实例透明,但是 类定义必须是可导入的 并住在同一个模块中 对象已存储

whyteboard.tools is not“相同的模块”tools(尽管它可以通过导入import tools通过同一包中的其他模块,它最终会出现在sys.modules as sys.modules['whyteboard.tools']:这绝对是至关重要的,否则同一包中的一个模块与另一个包中的一个模块导入的相同模块最终会出现多个且可能冲突的条目!)。

如果您的 pickle 文件采用良好/高级格式(而不是仅出于兼容性原因而默认的旧 ascii 格式),则在执行此类更改后迁移它们实际上可能not尽管另一个答案表明了这一点,但它与“编辑文件”(这是二进制的 &c...!)一样微不足道。相反,我建议您制作一些“pickle 迁移脚本”:让它修补sys.modules像这样...:

import sys
from whyteboard import tools

sys.modules['tools'] = tools

进而cPickle.load每个文件,del sys.modules['tools'], and cPickle.dump每个加载的对象返回文件:临时的额外条目sys.modules应该让泡菜成功加载,然后再次转储它们应该为实例的类使用正确的模块名称(删除额外的条目应该确保这一点)。

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

更改模块目录后的 Python pickle 的相关文章

  • 如何计算 pandas datetime 对象的均值和方差?

    如何计算 YYYY MM DD 形式的 python 日期时间对象的汇总统计数据 均值和标准差 我想对具有不同 ID 的不同日期时间对象组执行此操作 数据如下 import datetime as dt df pd DataFrame Da
  • 让 VoiceChannel.members 和 Guild.members 返回完整列表的问题

    每当我尝试使用 VoiceChannel members 或 Guild members 时 它都不会提供适用成员的完整列表 我从文本命令的上下文中获取 VoiceChannel 和 Guild 如下所示 bot command name
  • Gunicorn 工作人员无论如何都会超时

    我正在尝试通过gunicorn运行一个简单的烧瓶应用程序 但是无论我做什么 我的工作人员都会超时 无论是否有针对应用程序的活动 工作人员在我设置任何内容后总是会超时timeout值到 是什么导致它们超时 当我发出请求时 请求成功通过 但工作
  • pickle.PicklingError:无法腌制未打开读取的文件

    我在 Dataproc 上运行 PySpark 作业时收到此错误 可能是什么原因 这是错误的堆栈跟踪 File usr lib python2 7 pickle py line 331 in save self save reduce ob
  • 多输出堆叠回归器

    一次性问题 我正在尝试构建一个多输入堆叠回归器 添加到 sklearn 0 22 据我了解 我必须结合StackingRegressor and MultiOutputRegressor 经过多次尝试 这似乎是正确的顺序 import nu
  • VSCode Settings.json 丢失

    我正在遵循教程 并尝试将 vscode 指向我为 Scrapy 设置的虚拟工作区 但是当我在 VSCode 中打开设置时 工作区设置 选项卡不在 用户设置 选项卡旁边 我还尝试通过以下方式手动转到文件 APPDATA Code User s
  • 从Django中具有外键关系的两个表中检索数据? [复制]

    这个问题在这里已经有答案了 This is my models py file from django db import models class Author models Model first name models CharFie
  • python multiprocessing 设置生成进程等待

    是否可以生成一些进程并将生成进程设置为等待生成的进程完成 下面是我用过的一个例子 import multiprocessing import time import sys def daemon p multiprocessing curr
  • GUI(输入和输出矩阵)?

    我需要创建一个 GUI 将数据输入到矩阵或表格中并读取此表单数据 完美的解决方案是限制输入表单仅允许float 例如 A 1 02 0 25 0 30 0 515 0 41 1 13 0 15 1 555 0 25 0 14 1 21 2
  • Python 3:将字符串转换为变量[重复]

    这个问题在这里已经有答案了 我正在从 txt 文件读取文本 并且需要使用我读取的数据之一作为类实例的变量 class Sports def init self players 0 location name self players pla
  • 使用 python/numpy 重塑数组

    我想重塑以下数组 gt gt gt test array 11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44 为了得到 gt gt gt test2 array 11 12 21 22 13 14
  • python的shutil.move()在linux上是原子的吗?

    我想知道python的shutil move在linux上是否是原子的 如果源文件和目标文件位于两个不同的分区上 行为是否不同 或者与它们存在于同一分区上时的行为相同吗 我更关心的是如果源文件和目标文件位于同一分区上 shutil move
  • 如何将 ascii 值列表转换为 python 中的字符串?

    我在 Python 程序中有一个列表 其中包含一系列数字 这些数字本身就是 ASCII 值 如何将其转换为可以在屏幕上回显的 常规 字符串 您可能正在寻找 chr gt gt gt L 104 101 108 108 111 44 32 1
  • 如何使用 Python 3 检查目录是否包含文件

    我到处寻找这个答案但找不到 我正在尝试编写一个脚本来搜索特定的子文件夹 然后检查它是否包含任何文件 如果包含 则写出该文件夹的路径 我已经弄清楚了子文件夹搜索部分 但检查文件却难倒了我 我发现了有关如何检查文件夹是否为空的多个建议 并且我尝
  • Python:Goslate 翻译请求返回“503:服务不可用”[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们不允许提出寻求书籍 工具 软件库等推荐的问题 您可以编辑问题 以便用事实和引文来回答 这个问题似乎不是关于主要由程序员使用的特定编程问
  • 制作一份 Python 文档的 PDF 文件

    Python 官方网站提供 PDF 文档下载 但它们是按章节分隔的 我下载了源代码并构建了 PDF 文档 这些文档也是单独的 PDF 我怎么能够从源代码中的 Makefile 构建一个 PDF 文件 我认为这样阅读起来会更方便 如果连接单独
  • 等待子进程使用 os.system

    我用了很多os system在 for 循环内调用创建后台进程 如何等待所有后台进程结束 os wait告诉我没有子进程 ps 我使用的是Solaris 这是我的代码 usr bin python import subprocess imp
  • 如何使用 PrimaryKeyRelatedField 更新多对多关系上的类别

    Django Rest 框架有一个主键相关字段 http www django rest framework org api guide relations primarykeyrelatedfield其中列出了我的 IDmany to m
  • 如何在 Flask 中的视图函数/会话之间传递复杂对象

    我正在编写一个 Web 应用程序 当 且仅当 用户登录时 该应用程序从第三方服务器接收大量数据 这些数据被解析为自定义对象并存储在list 现在 用户在应用程序中使用这些数据 调用不同的视图 例如发送不同的请求 我不确定什么是最好的模式在视
  • NLTK:查找单词大小为 2k 的上下文

    我有一个语料库 我有一个词 对于语料库中该单词的每次出现 我想获取一个包含该单词之前的 k 个单词和该单词之后的 k 个单词的列表 我在算法上做得很好 见下文 但我想知道 NLTK 是否提供了一些我错过的功能来满足我的需求 def size

随机推荐

  • 发出具有与声明发出类型相同类型的属性的类

    我已经找到了如何发出一个类 如下所示 class MyClass String MyProperty get set 无法弄清楚如何发出以下内容 class MyClass MyClass MyProperty get set 我面临的问题
  • 如何在使用 Netbeans 的构建过程中将文件夹包含到 dist JAR 中?

    我正在使用 Netbeans 6 9 并且我已研究过编辑 build xml 文件 以便可以将目录和文件包含在构建项目所产生的 jar 文件中 所以我的问题是如何修改 build xml 文件以将其他文件夹放入 jar 中 我的项目有以下目
  • 从 Java 方法返回时 BigDecimal 不保留实际值

    我正在用 Java 制作一个货币转换应用程序 其他一些很棒的 StackOverflow 专家建议我阅读 BigDecimal 以替换 double 来解决任何精度问题 我有两种方法系统 它将起始货币转换为美元 然后将美元价值转换为目标货币
  • 使用名称访问工作表上的自定义属性

    我正在尝试使用属性名称来访问工作表上的自定义属性 但似乎不支持此功能 至少在 C 中不支持 我看到其他人报告它可以在 VB 中工作 并且文档也这么说 有人可以确认这在 C 中不起作用吗 这是示例代码 activeWorkSheet Cust
  • 如何使用 javascript 将时间(上午 12:30)转换为时间戳?

    谁能告诉我该怎么做 我想比较2次 看看哪一次更大 比如中午 12 30 和下午 5 30 使用 Date parse Date parse 24 09 2011 15 21 41
  • Visual Studios Express - 更改调试输出目录

    有没有办法让 VS 项目将调试 EXE 构建到 bin debug 以外的目录 我找到了这个 http msdn microsoft com en us library ms165410 28v vs 80 29 aspx 但是 这仅适用于
  • 更改存储在基于哈希的集合中的对象的哈希代码

    我有一个基于哈希的对象集合 例如HashSet or HashMap 实施过程中会遇到哪些问题hashCode 因为它是根据一些可变字段计算的 所以它可以随着时间而变化 它如何影响休眠 有什么理由让hashCode 默认返回对象的ID是坏的
  • 如何将类及其成员函数分离到头文件和源文件中

    我对如何将简单类的实现和声明代码分离到新的头文件和 cpp 文件中感到困惑 例如 我如何分离以下类的代码 class A2DD private int gx int gy public A2DD int x int y gx x gy y
  • gitlab:调用 gitlab-shell

    我一直在浏览代码gitlab shell 我无法理解它是如何被调用的 如果我对我的服务器 安装了 gitlab shell 进行了拉取 那么 gitlab shell 如何知道它 bin gitlab shell有这一行作为评论 GitLa
  • 事件源的性能

    我目前正在开发一个大型项目 需要实现服务器发送的事件 我决定使用事件源传输 并从简单的聊天开始 目前客户端仅监听新的聊天消息事件 但项目将来会有更多事件 首先 我真的很关心服务器端脚本及其循环 其次 我不确定使用mySQL数据库作为存储 在
  • 如何提取 MongoError: E11000 找到重复键的错误消息?

    如何提取错误消息MongoError E11000发现重复的钥匙 我只想要错误本身消息而不是整个对象 我将用一个例子来解释这一点 在mongo shell db test insertOne id 1 insert a document t
  • 在过去 365 天窗口中执行运行总计的有效方法

    这就是我的数据框的样子 库 数据 表 df lt fread Name EventType Date SalesAmount RunningTotal Runningtotal prior365Days John Email 1 1 201
  • 仅第一次记录显示,除非强制处置

    我正在使用 vs 2017 写一个netcoreapp2 0库 并使用 UnitTest 项目对其进行测试 XUnit 和 NUnit 给出相同的结果 我注意到除非我强行处置我的Serilog记录器 只有第一行会出现在Seq 这是我的两堂课
  • AWS 负载均衡器后面使用 Traefik 进行 HTTPS 重定向

    我正在尝试将所有传入的 Traefik 从 http 重定向到 https 以便从具有自定义端口的 docker 容器提供服务的 Web 应用程序 如果我构建这个 docker compose 文件 并扩展应用程序 一切都会按预期工作 我能
  • Ember Simple Auth 自定义验证器

    我一直在尝试创建一个session currentUser财产与id email and points特性 我正在参考使用 Ember 简单身份验证 Ember CLI 的自定义身份验证器 and 如何在会话中存储用户 但我就是不明白这些部
  • 使用 std::ranges::min 投影在 std::map 上

    是否可以在 std map 上投影 我尝试将 std ranges min 与投影一起使用 但它似乎会抛出错误 我无法解释为什么它不喜欢东西 include
  • 可以在自定义进度条progressDrawable中做圆角吗?

    I have a progress bar that is supposed to look like the attached image And I ve made it a long way I m very close the on
  • jMockit:如何期望构造函数调用模拟对象?

    我正在对执行一些序列化操作的方法进行单元测试 我打算模拟序列化逻辑 代码如下 ObjectInputStream ois new ObjectInputStream new BufferedInputStream new FileInput
  • 移植到 VS2015 / .NET 4.6 后,C++/CLI DLL 在加载时崩溃

    老实说 这可能是一个骗局VS2015 迁移的项目可以编译 但无法运行 调试断言失败 但这没有答案 我有更多细节 最近将我们的代码库从针对 v4 0 的 VS2010 移植到针对 v4 6 的 VS2015 我们有一个托管 C DLL 来提供
  • 更改模块目录后的 Python pickle

    我最近更改了程序的目录布局 之前 我将所有模块都放在 main 文件夹中 现在 我已将它们移动到以程序命名的目录中 并放置了一个 init py在那里制作一个包裹 现在 我的主目录中有一个 py 文件 用于启动我的程序 这更加简洁 不管怎样