使用Python 3.5安装cPickle

84
这可能有些傻,但我无法在 Python 3.5 Docker 镜像中安装 cPickle。 Dockerfile
FROM python:3.5-onbuild

requirements.txt

cpickle

当我尝试构建镜像时

$ docker build -t sample .
Sending build context to Docker daemon 3.072 kB
Step 1 : FROM python:3.5-onbuild
# Executing 3 build triggers...
Step 1 : COPY requirements.txt /usr/src/app/
Step 1 : RUN pip install --no-cache-dir -r requirements.txt
 ---> Running in 016c35a032ee
Collecting cpickle (from -r requirements.txt (line 1))
  Could not find a version that satisfies the requirement cpickle (from -r requirements.txt (line 1)) (from versions: )
No matching distribution found for cpickle (from -r requirements.txt (line 1))
You are using pip version 7.1.2, however version 8.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
The command '/bin/sh -c pip install --no-cache-dir -r requirements.txt' returned a non-zero code: 1
3个回答

169

cPickle 是 Python 2.x 标准库中的模块,而你现在使用的是 Python 3.x。如果你想使用 cPickle,可以按照以下步骤进行:

>>> import _pickle as cPickle

然而,在3.x版本中,使用pickle更加简单。

无需安装任何东西。如果某些内容需要在Python 3.x中使用cPickle,那么这很可能是一个bug。


1
啊!在Python 3.x中,_picklecPickle的替代品吗?还是说pickle也同样快速? - kampta
2
是的,pickle 使用 _pickle,因此它也很快,可以处理子类。 - Mike McKerns
1
我正在使用Python 3.6.6,并尝试了所有可能的方法:import pickle as cPickle,import pickle,import _pickle as cPickle,但仍然出现错误“ModuleNotFoundError: No module named 'cPickle'”。 - khushbu
1
@pari:我不认为你在上面评论中详细描述的这三个导入语句会产生特定的错误。也许你应该进一步调查,如果确实是某个新问题或者你正在经历一些错误,可能要问一个新的SO问题。 - Mike McKerns
45
在Python 2中,cPickle是pickle的加速版本,在标准库中稍后添加。通常情况下,导入时使用备选项pickle是非常正常的。在Python 3中,加速版本已经集成,因此没有理由使用除import pickle之外的其他内容。 - Martijn Pieters

4

您可以在 Python 2 和 3 中都使用此功能。

try:
  import cPickle as pickle
except:
  import pickle

0

我正在使用 Python 3.10.9 并尝试运行用 Python 2 编写的脚本,所以在阅读了上面的评论后,这些命令可以正常工作。

import pickle as pkl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接