问题标签 [dill]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
631 浏览

python - 序列化/腌制在字符串中定义的函数

我想做以下事情:

但是,这会导致以下错误:

我想解决的问题:我有一个字符串格式的函数,我需要能够序列化它(用于并行化目的。)

0 投票
1 回答
22857 浏览

python - How to dill (pickle) to file?

The question may seem a little basic, but wasn't able to find anything that I understood in the internet. How do I store something that I pickled with dill?

I have come this far for saving my construct (pandas DataFrame, which also contains custom classes):

and for reading

but I when reading I get the error

How do I do this?


EDIT for future readers: After having used this approach (to pickle my DataFrame) for while, now I refrain from doing so. As it turns out, different program versions (including objects that might be stored in the dill file) might result in not being able to recover the pickled file. Now I make sure that everything that I want to save, can be expressed as a string (as efficiently as possible) -- actually a human readable string. Now, I store my data as CSV. Objects in CSV-cells might be represented by JSON format. That way I make sure that my files will be readable in the months and years to come. Even if code changes, I am able to rewrite encoders by parsing the strings and I am able to understand the CSV my inspecting it manually.

0 投票
0 回答
218 浏览

python-3.4 - 跨多个模块使用“dill”的函数的使用

我希望你能帮助找到解决这个“谜团”的方法。

所以我有一个 python 模块,在一个类中我创建了一个使用 dill.dump 和 dill.load_session 的方法。我在模块内部调用这个方法,它工作正常。但是我有另一个模块,另一个类,我从第一个模块导入对象并尝试在这个类中调用该方法,而 dill 没有任何反应,无法正常工作。这是一个快速的代码示例:

模块 A.py

模块 B.py

当我运行 B.py 时,它会引发以下错误:

这种行为有什么解决办法吗?谢谢

0 投票
0 回答
369 浏览

python - 将自定义模块与python中的对象一起序列化

问题

假设我有这个模块名为custom_module

我在一个脚本中使用这个类来序列化我定义的类的一个对象custom_module

我将此泡菜文件复制到另一个环境并使用另一个脚本加载它:

这会产生这个错误:


尴尬的解决方案

作为一种解决方法,可以读取和执行custom_module我的脚本中的所有内容:

但这看起来很奇怪,我不能将 CustomClass 用作cm.CustomClass. 是否有任何其他解决方案不涉及将第一个环境中的所有代码复制到第二个环境?

0 投票
0 回答
713 浏览

python - 如何使用 dill 将所有类变量写入磁盘?

我正在尝试在我正在编写的代码中存储几个用于重启目的的对象。它们相当复杂,其中包含几层类,包括使用类变量的类。当我 dill.load() 备份它时,我需要恢复这一切。

不幸的是,我正在做的一件非常具体的事情似乎不适用于莳萝。

我创建了一个显示问题的测试用例:

基本的.py:

make_dill.py:

un_dill.py:

当它全部从同一个文件(make_dill.py)运行时,它工作正常,但是当我尝试读取 un_dill.py 中的基本文件时:

因此,由于某种原因,它没有捕获在实例初始化期间分配的类变量 z 。但是,它确实捕获了在类定义中正确分配的类变量 x。

我在这里想念什么?我需要保存这些对象的完整状态。

在稀疏的莳萝文档中,它说

除了酸洗 python 对象之外,dill 还提供了在单个命令中保存解释器会话状态的能力。

但我不知道该怎么做。

0 投票
1 回答
43 浏览

python - 存储类的初始实例以供所有未来实例访问

我有一个应用程序,我想让一个类的第一个实例可供该类的所有后续实例访问。我实现了这样的:

它工作得很好,但是当我尝试使用pickleor对其进行序列化时dill,动态创建的类属性Basic.initial无法正确序列化(如何使用 dill 将所有类变量写入磁盘?)。

有人告诉我,我正在做的事情是“糟糕的”,我可以理解这一点,因为它看起来确实有点迂回。

我希望第一个实例可以在未来的所有实例中使用,而无需不断地传递它。

有没有更好的方法来实现这一点?也许可以正确序列化?

0 投票
2 回答
4829 浏览

python - 不同服务器上的 Python 3.5 莳萝酸洗/解酸:“KeyError: 'ClassType'”

查看底部的更新

--

此处提出了类似的问题,但从未解决: pickling and unpickling user-defined class

我正在开发一个项目,该项目需要对用户定义的类进行腌制,并将它们发送到远程服务器,在那里它们被取消腌制并被调用。我们使用 Dill 库来实现这一点,并且取得了很大的成功。

不幸的是,我遇到了一个我很难调试的问题。我创建并腌制一个类,如下所示:

它创建了 dilled 类的 ascii 表示。

当我在另一台服务器上反序列化它时:

我收到以下错误:

如果我在远程系统上使用不同版本的 Python,我会预料到这一点,但它们是相同的:

服务器 1:

服务器 2:

此外,Dill 的两个版本都是 0.2.6。有什么想法可以调试吗?

编辑:我认为这可能与我的环境有关。我使用的是 Python 3.5,但列出了内置类型:

似乎ClassType在输出中,因为ClassType在 Python 3.5 中被删除,所以不应该是这种情况。这是非常奇怪的。

我在安装了 Python 2.7 和 Python 3.5 的系统上运行。2.7 安装会以某种方式污染 3.5 安装吗?

0 投票
1 回答
185 浏览

python - 获取的python函数源代码错误

我想获取 Python 函数的源代码。但是,我正在处理的函数具有使用函数本身实例化的装饰器。这似乎inspectdill有问题。特别是,我尝试了以下 MWE:

对于函数fun_1fun_3,这给出了预期的结果。对于fun_2(虽然它本质上与 fun_3 相同),inspector返回的源代码dill是错误的——它只给了我装饰器行。我希望得到

但我得到的只是

我可以想象这两个模块都只是搜索第一个函数声明。inspect这个假设是否正确,除了重新实现或之外是否有很好的解决方法dill

编辑:我使用的是 Python 2.7,但使用 Python 3.4 时遇到了相同的行为。

0 投票
1 回答
259 浏览

python - Python 脚本卡在 dill.dump()

我正在使用 Python 3 和 Discord.py API 包装器(使用 asyncio)编写一个不和谐机器人。我正在运行一个网络服务器来处理主线程中的 Atom Feed 通知和第二个线程中的不和谐客户端。

我正在使用 dill 来保存自定义类的字典。当机器人接收到包含有效命令的聊天消息(字典中的某些内容发生变化)时,discord 客户端(线程 2)运行该函数。

该脚本似乎卡在dill.dump()

功能

调用函数

我意识到我可以通过使用块来使代码看起来更好(并且可能更高效)with,这只是一个测试版本(因此也是打印语句的负载)。我运行时收到的输出是:

我没有收到任何错误消息,脚本只是停止在该行输出并冻结。

该文件在文件资源管理器中可见,但包含 0 个字节。

当我用 强制退出脚本时CTRL+C,文件最终保存。

当我在 python3 解释器中手动运行此代码片段时,它工作正常(从同一个工作目录,读取和写入权限在那里,因为脚本是由 root 运行的)。

0 投票
2 回答
4109 浏览

python - 为什么酸洗张量流张量会失败?

这是一个片段,它将成功序列化 with dill,但失败pickle. 令人惊讶的是,Tensor对象本身不是可腌制的。这是线程感知张量的基本限制,还是只是没有实现?

输出: