安装pickle时出现问题 - 没有这个文件或目录

9

我正在尝试在Ubuntu 16.04 LTS上使用pip安装cpickle。我已经搜索过一些资料,但还没有找到有用的信息。

PYTHONPATH未设置。

错误信息

user@hostname:~$ sudo -H pip3 install cpickle
Collecting cpickle
  Using cached cpickle-0.5.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/usr/lib/python3.5/tokenize.py", line 454, in open
        buffer = _builtin_open(filename, 'rb')
    FileNotFoundError: [Errno 2] No such file or directory: '/tmp/pip-build-wn926hef/cpickle/setup.py'

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-wn926hef/cpickle/
You are using pip version 8.1.1, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.


    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-q46tq1l8/cpickle/
You are using pip version 8.1.1, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

故障排除步骤

# version info
user@hostname:~$ python --version
Python 2.7.12
user@hostname:~$ python3 --version
Python 3.5.2

# I don't think cache is the problem
rm -rf ~/.cache/
sudo -H pip install  cpickle --no-cache-dir # same problem
sudo -H pip3 install  cpickle --no-cache-dir # same problem

2
这是哪个版本的Python?Python 2.7和3.4附带cPickle。 - lordingtar
看起来你的 python 是 python3pip 适用于 python2。请安装 pip3……并使用 pip3 安装 Python3 的模块。 - Knud Larsen
刚刚更新了问题版本,请使用Ctrl+F查找“version”。 - invapid
使用pip和pip3时遇到了同样的问题。 - invapid
1
你为什么要使用pip安装cPickle?它是Python标准库的一部分,因此它已经被安装了(Python 2),或者在Python 3中选择picklecPickle之间是一个实现细节,你不应该关心。 - jwodder
3个回答

14

在网上查询后,我找到了如下内容:

enter image description here

Python 2.x中的一个常见模式是,将一个模块的一个版本实现为纯Python代码,并将一个可选的加速版本实现为C扩展;例如pickle和cPickle。这使得每个使用这些模块的用户都需要负责导入加速版本并回退到纯Python版本。在Python 3.0中,加速版本被视为纯Python版本的实现细节。

用户应该始终导入标准版本,它尝试导入加速版本并回退到纯Python版本。pickle / cPickle对已经采用了这种处理方式。profile模块列入了3.1版本的清单中。StringIO模块已转换为io模块中的一个类。

这意味着在Python3中它是作为一个库存在的...

import _pickle as cPickle

更新

正如Invapid在下面的评论中提到的那样,这个与上面给出的答案类似。

from six.moves import cPickle

2
(a) 为什么你要发布一张文字图片,直接复制粘贴文字不是同样有效吗? (b) 你在“互联网”上的哪个位置找到这段文字的? - jwodder
2
Andy的答案可行。我还发现你可以使用from six.moves import cPickle来支持Python2和Python3。 - invapid
1
在Python 3.6.3中,我使用了import _pickle as cPickle而不是import pickle,它起作用了。谢谢 :) - MD SARFARAZ

6
是 Python 标准库的一部分,您不需要使用 安装。在 Python 2 中,它随 Python 一起安装。在 Python 3 中,引用发行说明: “Python 2.x 中的常见模式是,一个版本的模块在纯 Python 中实现,另外还有一个可选的加速版本以 C 扩展方式实现; 例如 pickle 和 cPickle。这使得每个使用这些模块的用户都需要导入加速版本并返回到纯 Python 版本。在 Python 3.0 中,加速版本被视为纯 Python 版本的实现细节。用户应始终导入标准版本,该版本尝试导入加速版本并回退到纯 Python 版本。”。pickle / cPickle 配对接受了此处理。在特定情况下,如果您尝试使用 pip 安装 ,则某个 Pythonista 会告诉人们这是错误的事情,因此注册了 项目(以及其他名为标准库模块的众多项目),并提供了一个 ,该文件仅会退出并显示错误“Package 'cpickle' must not be downloaded from pypi”。然而,创建包时可能出了问题,或者 PyPI 出现了问题,导致源分发文件损坏,从而导致您在此处看到错误。因此,即使此错误已得到修复,您仍将收到另一个错误告诉您不要尝试执行您正在尝试的操作。

3
您可以使用:
pip install pickle-mixin

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