Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

register_pickle_by_value appears to not deliver monkeypatches to receiver

未关闭
#586 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
38/100
Issue 类型
缺陷
描述清晰度
需要澄清
活跃度
停滞
技术栈
python
领域
tooling

调研方向

首先复现围绕 register_pickle_by_value()、cloudpickle.dumps() 和 pickle.loads() 的双环境示例,比较两侧经过 patch 的 tdb.my_function 的行为。跟踪 lambda 和对 tdb 模块的引用是如何表示和解析的,然后记录观察到的结果是否符合预期,或确定需要测试的最小失败行为。

由索引模型根据 Issue 内容生成。

描述

Should I expect register_pickle_by_value() to deliver monkeypatches? I don't know if what I'm observing is a bug or only missing functionality.

I have two python environments, A and B. Each has cloudpickle 3.1.2 installed and also a package that I'm developing at work. Let's call it "tdb". I run a script in environment A that looks like this:

import sys

import cloudpickle
import tdb

# monkeypatch an attribute of tdb.
tdb.my_function = lambda *args, **kwargs: ["fake", "values"]

def func():
    return tdb.my_function()

assert func() == ["fake", "values"]

cloudpickle.register_pickle_by_value(tdb)
pickle_data = cloudpickle.dumps(func, protocol=4)
sys.stdout.buffer.write(pickle_data)

I'm piping the output to a script that runs in environment B

import pickle
import sys

pickle_data = sys.stdin.buffer.read()
print(pickle_data)

func = pickle.loads(pickle_data)
print(func())

But I see the original tdb.my_function being called in environment B, not my monkeypatch.

The odd thing is that I can see lambda when I print the pickle stream in environment B. It's there in some sense, but isn't being understood on the receiver side.

主要语言
Python
星标
1.9k
派生
197
平均合并
1 天 10 小时
30 天内合并 PR
1

环境准备

我们还没有检查这个项目的环境配置文件。先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

cloudpipe/cloudpickle 的其他 Issue

查看 cloudpipe/cloudpickle 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。