web-dev-qa-db-fra.com

pip install pickle ne fonctionne pas - aucun fichier ou répertoire de ce type

Ubuntu 16.04 LTS, essayant d'installer cpickle avec pip. J'ai cherché un peu, je n'ai encore rien trouvé d'utile.

PYTHONPATH n'est pas défini.

Message d'erreur

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.

étapes de dépannage

# 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
7
invapid

Vérification sur l'interweb, j'ai trouvé cela

enter image description here

Un modèle courant dans Python 2.x est d'avoir une version d'un module implémentée en Python pur, avec une version accélérée optionnelle implémentée comme une extension C; par exemple, pickle et cPickle.

Cela impose la charge d'importer la version accélérée et de retomber sur la version Python pure) sur chaque utilisateur de ces modules. Dans Python 3.0, les versions accélérées sont considéré les détails d'implémentation des versions Python pures.

Les utilisateurs doivent toujours importer la version standard, qui tente d'importer la version accélérée et revient à la version pure Python. La paire pickle/cPickle a reçu ce traitement. Le module de profil est sur la liste pour 3.1 Le module StringIO a été transformé en classe dans le module io.

Ce qui signifie qu'en Python3, il s'agit d'une bibliothèque ...

import _pickle as cPickle
12
Andy K

cPickle fait partie de la bibliothèque standard de Python; vous ne l'installez pas avec pip. Dans Python 2, il est installé avec Python . Dans Python 3, en citant les notes de version avec un accent supplémentaire:

Un modèle courant dans Python 2.x est d'avoir une version d'un module implémentée en Python pur, avec une version accélérée optionnelle implémentée comme une extension C; par exemple, cornichon et cPickle. Cela place le fardeau de l'importation de la version accélérée et de retomber sur la version pure Python sur chaque utilisateur de ces modules. Dans Python 3.0, les versions accélérées sont considérées comme des détails d'implémentation des versions pures Python. Les utilisateurs doivent toujours importer la version standard, qui tente d'importer la version accélérée et revient à la version pure Python. La paire pickle/cPickle a reçu ce traitement.

Dans le cas spécifique d'essayer d'installer cpickle avec pip, certains Pythonistes ont décidé d'informer les gens que c'était la mauvaise chose à faire et ont donc enregistré le projet cpickle (ainsi que de nombreux autres nommés d'après la norme modules de bibliothèque) et lui a donné un setup.py qui ne ferait que quitter avec l'erreur "Package 'cpickle' must not be downloaded from pypi". Cependant, quelque chose semble avoir mal tourné soit lors de la création du package, soit à la fin de PyPI, ce qui a provoqué une mauvaise formation du fichier de distribution source, entraînant l'erreur que vous voyez ici. Ainsi, même si cette erreur était corrigée, vous obtiendriez toujours une erreur différente vous disant de ne pas faire ce que vous essayez de faire.

5
jwodder