【问题标题】:How can I know if python 3 is using cPickle or Pickle?我怎么知道 python 3 使用的是 cPickle 还是 Pickle?
【发布时间】:2019-03-28 20:10:04
【问题描述】:

我看到这两个关于 Pickle 和 cPickle 的答案已由 python 3 自动处理,对用户透明:

我如何知道在 python 3 中是否使用了快速版本 (cPickle)?我想强制它使用 cPickle。我的主要兴趣甚至不是速度,而是更短的文件大小,因为我生成的文件最终大于 1 GB。

【问题讨论】:

    标签: python python-3.x file pickle


    【解决方案1】:

    除非您从源代码构建您的 Python 二进制文件,否则您几乎可以肯定使用的是 C 扩展。

    但是,如果你必须确定,检查_pickle模块是否可以导入:

    >>> import _pickle
    

    pickle module imports _pickle 并且只有当 ImportError 失败时才会使用纯 Python 实现。

    明确一点:在 Python 2 中称为 cPickle 的内容已重命名为 _pickle 并且是透明导入的,您无需执行任何显式操作即可使用它。在 Python 2 中 picklecPickle 之间存在分歧,这简直令人困惑。

    【讨论】:

    • 如果导入失败,我会知道吗?
    • 然后ImportError 被提出。它只是一个模块,要么它可用并且将被使用,要么导入失败并出现通常的ImportError 异常。
    • 不会在内部处理ImportError,而不是打印给我,因为它只会导入纯python pickle 模块吗?
    • 我从来没有手动安装过 cPickle,所以我只是想确保它正在使用它。我将测试导入_pickle 看看是否有任何变化
    • 再次重申,Python 3 中没有 cPickle 模块。该模块在 Python 3 中已替换为 _pickle
    猜你喜欢
    • 2016-09-03
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 2021-10-05
    • 1970-01-01
    相关资源
    最近更新 更多