当前位置: 首页 > 面试题库 >

更改模块目录后的Python酸洗

钮实
2023-03-14
问题内容

我最近更改了程序的目录布局:以前,我的所有模块都位于“主”文件夹中。现在,我将它们移动到以该程序命名的目录中,并在其中放置__init__.py一个包。

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

无论如何,尝试从html" target="_blank">程序的早期版本中加载腌制文件失败。我收到“ ImportError:没有名为工具的模块”的信息-
我猜是因为我的模块以前位于主文件夹中,而现在位于whyteboard.tools中,而不仅仅是普通工具。但是,在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。在重新组织目录之前,绝对不会发生此酸洗问题。


问题答案:

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

pickle可以透明地保存和还原类实例,但是类定义必须可导入,并且与对象存储时位于同一模块中

whyteboard.tools 与“相同的模块为” tools(即使它可通过被导入import tools通过在同一包装中的其它模块,则在结束了sys.modulessys.modules['whyteboard.tools']:这是绝对重要的,否则在同一封装在由一个进口VS一个相同的模块另一个程序包最终会有多个甚至可能有冲突的条目!)。

如果您的咸菜文件是一个好/高级格式(相对于旧的ASCII格式是默认仅出于兼容性的原因),迁移过一次执行这样的变化可能实际上 并不
像平凡相当的“编辑文件”(这是二进制&c
…!),尽管另有答案。我建议您改为制作一个“斑点迁移脚本”:让它sys.modules像这样进行修补…:

import sys
from whyteboard import tools

sys.modules['tools'] = tools

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



 类似资料:
  • 在我的windows安装中包括,其中可执行。我可以从shell启动以及。我也希望在中安装新的可执行文件,但这似乎不可能实现。 如何更改全局安装路径?

  • 问题内容: 在我的Windows中,安装包括,可执行文件在哪里。我可以从shell以及上启动。我也希望安装新的可执行文件,但似乎无法实现。 设置和变量不会改变任何东西:默认情况下仍会安装东西。 如何更改全局安装路径? 问题答案: 您需要做的只是阅读文档。我不想立即启动我的Win笔记本,因此无法验证它,但您只应在配置文件中更改为。如果要为所有用户全局更改它,请编辑文件,否则请创建/编辑。 但是此更改

  • 在Apache 2.4中更改根目录时遇到问题。9在Mac OS X优胜美地10.10上。2.我正在使用本教程:http://coolestguidesontheplanet.com/forbidden-403-you-dont-have-permission-to-access-username-on-this-server/ 当我导航到http://localhost/~Owner/,我得到40

  • 我的结构。jsp文件是:WEB-INF/jsp/。。。。;但我有索引。WEB-INF/index中的jsp文件。jsp文件夹。此外,我在WEB-INF/目录中还有其他类型的文件,我想移动索引。将jsp放入如下文件夹:WEB-INF/jsp/index。jsp。那么,我是否可以(在我的conf文件中,而不是在tomcat设置中)更改我的索引页在另一个文件夹中?我试着用这个: 和许多变种的欢迎文件列表

  • 问题内容: 是用于更改工作目录的shell命令。 如何在Python中更改当前的工作目录? 问题答案: 你可以使用以下命令更改工作目录: 使用此方法时,有两个最佳实践: 在无效路径上捕获异常(WindowsError,OSError)。如果抛出异常,请不要执行任何递归操作,尤其是破坏性操作。它们将沿旧路径而不是新路径运行。 完成后,返回到旧目录。可以通过将chdir调用包装在上下文管理器中以异常安

  • 问题内容: 我有一个使用内置模块的Python脚本,但也导入了与主脚本本身位于同一目录中的许多自定义模块。 例如,我会打电话 和agent.py具有许多导入,包括: 其中checks与agent.py位于同一目录中的文件 当前工作目录为agent /时,一切都很好。但是,如果我从任何其他目录调用agent.py,则显然无法导入checks.py等错误。 我如何确保可以导入自定义模块,而不管从哪里调