pip install pickle 不工作 - 没有这样的文件或目录

Posted

技术标签:

【中文标题】pip install pickle 不工作 - 没有这样的文件或目录【英文标题】:pip install pickle not working - no such file or directory 【发布时间】:2017-09-18 21:51:24 【问题描述】:

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

【问题讨论】:

这是什么版本的python? Python 2.7 和 3.4 自带 cPickle 看起来你的 python 是 python3pip 用于 python2。请安装pip3 ......并使用pip3为Python3安装模块。 刚刚用版本更新问题,ctrl+f 表示“版本” pip 和 pip3 有同样的问题 你为什么要使用 pip 安装cPickle?它是 Python 标准库的一部分,因此要么已经安装(Python 2),要么选择 picklecPickle 是您不应该关心的实现细节(Python 3)。 【参考方案1】:

上网查了一下,发现了这个

Python 2.x 中的一个常见模式是在纯 Python 中实现一个模块版本,并以 C 扩展实现可选的加速版本;例如,pickle 和 cPickle。

这将导入加速版本和退回到这些模块的每个用户的纯 Python 版本的负担。在 Python 3.0 中,加速版本被视为纯 Python 版本的实现细节。

用户应始终导入标准版本,它会尝试导入加速版本并回退到纯 Python 版本。 pickle / cPickle 对接受了这种处理。配置文件模块在 3.1 的列表中。 StringIO 模块已经变成了 io 模块中的一个类。

这意味着在 Python3 中它是一个库 ...

import _pickle as cPickle

更新

正如 Invapid 在下面输入的 cmets,这个与上面的答案相似

from six.moves import cPickle

【讨论】:

(a) 为什么在复制和粘贴文本也能正常工作的情况下发布文本图片? (b) 你是在“互联网”上的什么地方找到这段文字的? 安迪的回答有效。我还发现你可以使用from six.moves import cPickle 来支持python2和python3 我没有在 Python 3.6.3 中使用import pickle,而是使用了import _pickle as cPickle,它成功了。谢谢:)【参考方案2】:

cPickle 是 Python 标准库的一部分;您不使用pip 安装它。在 Python 2 中,it comes installed with Python。在 Python 3 中,quoting the release notes 增加了重点:

Python 2.x 中的一个常见模式是在纯 Python 中实现一个模块版本,并以 C 扩展实现可选的加速版本;例如,pickle 和 cPickle。这将导入加速版本和退回到这些模块的每个用户的纯 Python 版本的负担。 在 Python 3.0 中,加速版本被视为纯 Python 版本的实现细节。用户应始终导入标准版本,它会尝试导入加速版本并回退到纯 Python 版本。pickle / cPickle 对接受了这种处理。

在尝试使用 pip 安装 cpickle 的特定情况下,一些 Pythonista 决定通知人们这样做是错误的,因此注册了 cpickle 项目(以及许多其他以标准库模块命名的项目)并给它一个setup.py,它只会以错误“Package 'cpickle' must not be downloaded from pypi”退出。但是,在创建包或 PyPI 端似乎出现了问题,导致源分发文件格式错误,从而导致您在此处看到的错误。因此,即使修复了此错误,您仍然会收到一个不同的错误,告诉您不要执行您正在尝试执行的操作。

【讨论】:

【参考方案3】:

你可以使用:

pip install pickle-mixin

【讨论】:

以上是关于pip install pickle 不工作 - 没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章

pip install psycopg2 不工作

pip install MySQL-python==1.2.5 不工作[重复]

pip install 在笔记本单元格中工作,但在脚本中不工作[重复]

配置以便 pip install 可以从 github 工作

pip install出错,pip版本不匹配

Ipython没有可用的readline并且pip install readline错误