Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

pip install pickle not working - no such file or directory

Ubuntu 16.04 LTS, trying to install cpickle with pip. I've searched a bit, haven't found anything useful yet.

PYTHONPATH isn't set.

Error message

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.

troubleshooting steps

# 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
like image 480
invapid Avatar asked Apr 21 '17 19:04

invapid


3 Answers

Checking on the interweb, I found this

enter image description here

A common pattern in Python 2.x is to have one version of a module implemented in pure Python, with an optional accelerated version implemented as a C extension; for example, pickle and cPickle.

This places the burden of importing the accelerated version and falling back on the pure Python version on each user of these modules. In Python 3.0, the accelerated versions are considered implementation details of the pure Python versions.

Users should always import the standard version, which attempts to import the accelerated version and falls back to the pure Python version. The pickle / cPickle pair received this treatment. The profile module is on the list for 3.1. The StringIO module has been turned into a class in the io module.

Which means in Python3 it comes as a library ...

import _pickle as cPickle

Update

As Invapid puts in the comments below, this one is similar to the answer above

from six.moves import cPickle
like image 150
Andy K Avatar answered Oct 26 '22 17:10

Andy K


You can use:

pip install pickle-mixin
like image 43
Vardhan Avatar answered Oct 26 '22 18:10

Vardhan


cPickle is part of Python's standard library; you do not install it with pip. In Python 2, it comes installed with Python. In Python 3, quoting the release notes with added emphasis:

A common pattern in Python 2.x is to have one version of a module implemented in pure Python, with an optional accelerated version implemented as a C extension; for example, pickle and cPickle. This places the burden of importing the accelerated version and falling back on the pure Python version on each user of these modules. In Python 3.0, the accelerated versions are considered implementation details of the pure Python versions. Users should always import the standard version, which attempts to import the accelerated version and falls back to the pure Python version. The pickle / cPickle pair received this treatment.

In the specific case of trying to install cpickle with pip, some Pythonista decided to inform people that this was the wrong thing to do and so registered the cpickle project (along with numerous others named after standard library modules) and gave it a setup.py that would do nothing but exit with the error "Package 'cpickle' must not be downloaded from pypi". However, something appears to have gone wrong either in creating the package or else on PyPI's end that has caused the source distribution file to be malformed, resulting in the error you see here. Thus, even if this error were fixed, you'd still get a different error telling you not to do what you're trying to do.

like image 24
jwodder Avatar answered Oct 26 '22 19:10

jwodder