Python-future: import intégré cassé dans la version 0.17.0

Créé le 26 oct. 2018  ·  14Commentaires  ·  Source: PythonCharmers/python-future

L'importation de fonctions intégrées dans la version 0.17.0 provoque une erreur.

>>> import builtins
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named builtins
>>>

Commentaire le plus utile

Nous avons le même problème, mais fait intéressant, si nous pip installons sans cache dir, cela fonctionne...

pip install -U --force   future
>>> import builtins
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named builtins
>>>
pip install -U --force  --no-cache-dir future
>>> import builtins
>>>

Tous les 14 commentaires

Nous avons le même problème ici.

J'essaie d'indiquer l'origine du problème, mais ce n'est pas encore clair.

Nous avons le même problème, mais fait intéressant, si nous pip installons sans cache dir, cela fonctionne...

pip install -U --force   future
>>> import builtins
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named builtins
>>>
pip install -U --force  --no-cache-dir future
>>> import builtins
>>>

sous Windows, en supprimant le futur whl 0.17.0 mis en cache de C:\Users\\AppData\Local\pip, puis réinstaller le package le résout.

il semble donc (c'est une théorie) que la publication précédente de 0.17.0 était cassée, mais est maintenant corrigée.

@jmadler nous a fait savoir ce qui s'est passé, nous aimerions comprendre le contexte.

Dites-moi s'il vous plaît, n'avez-vous pas construit la roue future avec Python-3 et essayé de l'utiliser avec Python-2 ? Si c'est le cas, cela peut être la cause du problème.

Eh bien, si la future roue est construite par python 3, mise en cache comme universelle, puis récupérée par python 2 à partir du cache, cela pourrait être ça.

Désolé les gens ! Ceci est ma première distribution de ce package particulier (et PyPI aussi...)

Lorsque j'ai fait la construction, j'ai exécuté python setup.py sdist avec Py3, et j'ai testé pip install dist/future-0.17.0.tgz sur Py2 et Py3 et j'ai validé son installation via ce mécanisme. J'ai effectué la validation de l'installation en testant quelques importations et dir () sur le REPL pour les fonctions intégrées, reprlib et futures

Une fois validé, j'ai couru twine upload dist/future-0.17.0.tgz pour le faire passer à PyPI.

pip2 --version && pip3 --version :

pip 10.0.1 de /usr/local/lib/python2.7/site-packages/pip (python 2.7)
pip 18.0 de /usr/local/lib/python3.7/site-packages/pip (python 3.7)

Une autre possibilité est que le bdist_wheel local soit construit sur Py3 et mis en cache quelque part et traité comme universel (quand ce n'est pas le cas), mais je n'ai pas téléchargé de roue sur PyPI.

Je ne parviens pas à reproduire dans un venv vide avec pip install future==0.17.0 pour Py2 et Py3 sur ma machine macOS.

Est-il possible que PyPI réécrive le package d'une manière ou d'une autre ? Ou peut-être que le comportement de pip a changé ?

sous Windows, suppression du futur whl 0.17.0 mis en cache de C:\Users\AppData\Local\pip, puis réinstaller le package le résout.

il semble donc (c'est une théorie) que la publication précédente de 0.17.0 était cassée, mais est maintenant corrigée.

Je pense aussi. Peut-être que quelqu'un peut publier 0.17.1 avec correctif)

En effet, si le package est installé via py3, il sera mis en cache dans le cache pip local. Toutes les futures installations de future (que ce soit py2 ou py3) utiliseront cette version mise en cache comme son universel marqué.

Cependant, le setup.py https://github.com/PythonCharmers/python-future/blob/master/setup.py#L61 a cette condition qui rend la roue générée (maintenant dans le cache pip) incompatible pour py2 (puisqu'elle a été construit pour py3). J'imagine que si la roue est générée via py2, cela pourrait signifier une mauvaise nouvelle pour une installation py3.

@jmadler Le problème est résolu dans master, la seule chose restante serait de fusionner le PR #404 et de publier la v0.17.1

À l'heure actuelle, avec la v0.17.0, tout utilisateur utilisant à la fois Py2 et Py3 sur sa machine risque d'obtenir un mauvais cache de roue pip et de rencontrer cette erreur.

Est-il possible de sortir une version au plus vite ? Si vous avez des questions/préoccupations, n'hésitez pas, je serai ravi de vous aider

Ça sonne bien, j'ai sorti 0.17.1 avec #399 et #404 inclus. Pouvez-vous jeter un œil et me faire savoir si cela résout ce problème pour vous?

A1 - fixe.

Pas:

1) Faites tourner une machine Windows 10 vierge avec Python 3.6 et Python 2.7 installés

2) pip install future dans un contexte Python 3.6 - confirmez que la roue est construite et mise en cache
py -3,6 -m pip installer futur
roue en cache : future-0.17.1-cp36-none-any.whl

3) pip install future dans un contexte Python 2.7 - confirmez que la roue est à nouveau construite et n'utilise pas la version mise en cache de l'étape 2)
py -2.7 -m pip installer futur
roue en cache : future-0.17.1-cp27-none-any.whl

4) Dans une session Python 2, importez les fonctions intégrées et aucune erreur ne se produit
py -2.7
Python 2.7.8 (par défaut, 30 juin 2014, 16:03:49) [MSC v.1500 32 bits (Intel)] sur win32
Tapez "aide", "droit d'auteur", "crédits" ou "licence" pour plus d'informations.

importer des fonctions intégrées

par comparaison, 0.17.0 avait cette seule roue : future-0.17.0-py2.py3-none-any.whl

J'ai eu ce problème avec 0.17.0 et je peux confirmer que 0.17.1 l'a corrigé.

Content de l'entendre !

Merci Gilles, Vincent, et al. Vos conseils ont été super utiles :)

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

asottile picture asottile  ·  18Commentaires

xmo-odoo picture xmo-odoo  ·  4Commentaires

wimglenn picture wimglenn  ·  5Commentaires

treyhunner picture treyhunner  ·  5Commentaires

foreignmeloman picture foreignmeloman  ·  3Commentaires