Pipenv: 2018.11.26: pipenv émet des erreurs pythons lors de la création d'un virtualenv

Créé le 6 déc. 2018  ·  30Commentaires  ·  Source: pypa/pipenv

Description du problème

Peut-être lié à # 3229, pipenv continue de générer des erreurs lors de la création d'un virtualenv:

$ pipenv --three
['Traceback (most recent call last):\n', '  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 160, in _create_subprocess\n    combine_stderr=combine_stderr)\n', '  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 134, in _spawn_subprocess\n    return subprocess.Popen(cmd, **options)\n', '  File "/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/subprocess.py", line 709, in __init__\n    restore_signals, start_new_session)\n', '  File "/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/subprocess.py", line 1344, in _execute_child\n    raise child_exception_type(errno_num, err_msg, err_filename)\n', "FileNotFoundError: [Errno 2] No such file or directory: '/usr/local/bin/pythonz': '/usr/local/bin/pythonz'\n", '\nDuring handling of the above exception, another exception occurred:\n\n', 'Traceback (most recent call last):\n', '  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/contextmanagers.py", line 150, in spinner\n    yield _spinner\n', '  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 314, in run\n    write_to_stdout=True\n', '  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 162, in _create_subprocess\n    sys.stderr.write("Error %s while executing command %s", exc, " ".join(cmd._parts))\n', 'TypeError: write() takes exactly one argument (3 given)\n']
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 160, in _create_subprocess
    combine_stderr=combine_stderr)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 134, in _spawn_subprocess
    return subprocess.Popen(cmd, **options)
  File "/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/subprocess.py", line 709, in __init__
    restore_signals, start_new_session)
  File "/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/subprocess.py", line 1344, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: '/usr/local/bin/pythonz': '/usr/local/bin/pythonz'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/bin/pipenv", line 11, in <module>
    sys.exit(cli())
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 764, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 1114, in invoke
    return Command.invoke(self, ctx)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/decorators.py", line 64, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/decorators.py", line 17, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/pipenv/cli/command.py", line 208, in cli
    clear=state.clear,
  File "/usr/local/lib/python3.6/site-packages/pipenv/core.py", line 574, in ensure_project
    pypi_mirror=pypi_mirror,
  File "/usr/local/lib/python3.6/site-packages/pipenv/core.py", line 516, in ensure_virtualenv
    ensure_python(three=three, python=python)
  File "/usr/local/lib/python3.6/site-packages/pipenv/core.py", line 397, in ensure_python
    path_to_python = find_a_system_python(python)
  File "/usr/local/lib/python3.6/site-packages/pipenv/core.py", line 360, in find_a_system_python
    python_entry = finder.find_python_version(line)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/pythonfinder.py", line 114, in find_python_version
    major=major, minor=minor, patch=patch, pre=pre, dev=dev, arch=arch, name=name
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 396, in find_python_version
    ver = next(iter(self.get_pythons(sub_finder)), None)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 279, in get_pythons
    reverse=True
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 277, in <genexpr>
    (p for p in self._filter_paths(finder) if p.is_python),
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 264, in <genexpr>
    pth for pth in unnest(finder(p) for p in self.path_entries if p is not None)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/utils.py", line 251, in unnest
    for el in target:
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 264, in <genexpr>
    pth for pth in unnest(finder(p) for p in self.path_entries if p is not None)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/mixins.py", line 121, in find_python_version
    for child in unnest(self.pythons.values())
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 531, in pythons
    for path, entry in self.children.items():
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/cached_property.py", line 35, in __get__
    value = obj.__dict__[self.func.__name__] = self.func(obj)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 501, in children
    for child_key, child_val in self._gen_children():
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 493, in _gen_children
    entry = PathEntry.create(path=child, **pass_args)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 575, in create
    _new = cls(**creation_args)
  File "<attrs generated init b90d7581ea07925e94241736776cf96c889eb52c>", line 16, in __init__
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 518, in get_py_version
    py_version = PythonVersion.from_path(path=self, name=self.name)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/python.py", line 395, in from_path
    py_version = get_python_version(path.path.absolute().as_posix())
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/utils.py", line 68, in get_python_version
    combine_stderr=False, write_to_stdout=False)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 314, in run
    write_to_stdout=True
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 162, in _create_subprocess
    sys.stderr.write("Error %s while executing command %s", exc, " ".join(cmd._parts))
TypeError: write() takes exactly one argument (3 given)

Résultat attendu

Aucune journalisation des erreurs attendue lors de la création d'un virtualenv.

Résultat actuel

La création de virtualenv échoue.

Étapes à suivre pour répliquer

$ pipenv --three

pipenv --support émet également ces erreurs et ne parvient pas à collecter les informations de support!

Type Regression Release Blocker Vendored Dependencies

Commentaire le plus utile

La version actuelle me semble sûrement arrosée. Une autre solution de contournement temporaire que j'ai vue dans un problème précédent était de passer spécifiquement un chemin python comme ceci:

pipenv --three --python=`which python3`

Je fais ça avec succès pour le moment: grimaçant:

Tous les 30 commentaires

Il semble que /usr/local/bin/pythonz n'est plus un chemin valide.

Hmm. Aurait-il jamais dû l'être? Je n'ai jamais utilisé directement pythonz. Je pensais que c'était juste une dépendance pipenv qu'il gérait lorsque j'ai installé pipenv.

Pour commencer, je viens de désinstaller et de réinstaller pipenv 2018.11.26 et j'ai toujours le problème.

Pouvez-vous fournir la sortie de pipenv --support ? Et pour confirmer, non ça n'aurait pas dû être

Oh nvm vient de voir votre message. Je veux juste confirmer qu'il n'y a pas de version escroc de pipenv sur votre chemin quelque part. Pouvez-vous vérifier which pipenv et python -m pipenv --version

$ which pipenv
/usr/local/bin/pipenv

python -m pipenv --version renvoyé No module named pipenv parce que Python 2 et Python 3 sont installés via Homebrew, et python exécute Python 2.7. Selon une recommandation précédente ici, j'ai installé pipenv sous Python 3. J'ai donc remplacé python3 et j'ai obtenu:

$ python3 -m pipenv --version
pipenv, version 2018.11.26

Merci!

Ah ok. Et oui, le bug a du sens. Je vais juste le taguer en amont et m'assurer qu'il est corrigé

Un mot sur quand un correctif sera publié pour cela? J'ai ce problème, il m'empêche d'installer les exigences de pipenv. J'ai essayé la solution de contournement de @commandtab sans une telle chance.

Je ne peux pas pipenv travailler du tout avec la version actuelle.

$ which pipenv
/Users/josh/.pyenv/shims/pipenv

$ python -m pipenv --version
pipenv, version 2018.11.26

J'ai essayé d'installer avec python3.7 depuis homebrew, et le même problème.

Il semble qu'il n'y a pas d'urgence ici, ou que ce n'est pas un gros problème. Est-ce que je manque quelque chose ou est-ce que pipenv est complètement cassé avec la version actuelle?

La version actuelle me semble sûrement arrosée. Une autre solution de contournement temporaire que j'ai vue dans un problème précédent était de passer spécifiquement un chemin python comme ceci:

pipenv --three --python=`which python3`

Je fais ça avec succès pour le moment: grimaçant:

Cette solution de contournement ne fonctionnait pas pour moi. J'ai dû passer à 2018.10.13 , puis utiliser la solution de contournement sur ce fil :

pipenv install -d --python=$HOME/.pyenv/versions/3.7.1/bin/python

Pour autant que je sache, pipenv est complètement cassé depuis octobre.

@techalchemy Un mot sur un correctif de balise en amont? La création de pipenv virtualenv nécessite toujours des solutions de contournement pour l'appel.

Merci ❤️

C'était un peu difficile avec tous les autres correctifs qui devaient être intégrés, mais je pense que CI passera maintenant et cela sera corrigé avec # 3330 - désolé pour le problème

Ah ok. Et oui, le bug a du sens. Je vais juste le taguer en amont et m'assurer qu'il est corrigé

Le problème persiste, aucune idée de la date à laquelle ce correctif sera publié.

Même problème ici.

Peut confirmer que la solution de contournement de @ command-tab fonctionne toujours.

Cela se produit définitivement avec l'homebrew pipenv et python ... un peu surpris qu'il n'y ait pas de test pour le couvrir vu depuis combien de temps ce problème existe ...

Je peux également confirmer que ce problème se produit toujours, malgré la résolution de ce problème GitHub.

Les responsables ont-ils besoin de créer un nouveau problème?

Même problème avec Ubuntu 18 LTS installé dans le sous-système Windows pour Linux.

La solution de contournement fonctionne pour moi.

@techalchemy ce problème semble toujours exister. Pouvez-vous le rouvrir ou indiquer clairement que vous souhaitez qu'un nouveau numéro soit créé?

Merci.

Même problème avec Ubuntu 18 LTS installé dans le sous-système Windows pour Linux.

pareil ici

@techalchemy s'il vous plaît jeter un œil à nouveau

Même problème ici sur macOs Mojave et python 3.7

Moi aussi:

  • Catalina
  • Python 3.7.

Tout fonctionne bien une fois que j'ai commenté cette ligne dans mon Pipfile:

[requires]

#python_version = "3.7.4"

Moi aussi:

  • Catalina
  • Python 3.7.

Tout fonctionne bien une fois que j'ai commenté cette ligne dans mon Pipfile:

[requires]

#python_version = "3.7.4"

ahhhh cela a fonctionné pour moi, merci!

@JarredStanford @edsu
Cela a fonctionné pour moi aussi sur WSL dans VSCode (je n'ai pas essayé un shell extérieur car cela fonctionnait bien pour un projet différent).

@ command-tab
L'ajout de "--python = which python3 " a également fonctionné. Je n'ai pas essayé d'ajouter "--three" et cela ne semble pas nécessaire pour mon cas d'utilisation / ma version.

Après avoir obtenu les deux solutions de contournement et j'ai pu le faire fonctionner, je les ai supprimées et j'ai essayé une troisième fois de m'assurer que l'environnement causait toujours un problème (narrateur: c'était le cas).

@techalchemy
Je pense que ce n'est peut-être pas "entièrement résolu" dans 3330? Cela pourrait être un problème tangentiel causant les mêmes symptômes. Dans mon cas, j'utilise WSL et je me demande si 'python3' et 'python3.exe' étant tous deux dans mon chemin WSL semble suspect.

Pensez-vous qu'il vaut mieux que j'ouvre un nouveau problème, souhaitez-vous que j'exécute des diagnostics supplémentaires, ou autre chose?

J'utilise wsl2 avec arclinux (manjaro)
Il semble que pipenv appelle le python dans les fenêtres d'environnement hôte pour l'installer
nous devons donc définir où trouver le python avec:
pipenv --python=<PATH_TO_PYTHON>
ou
pipenv --python=which python3

travaille pour moi.

Peut confirmer que cela se produit sous WSL avec Ubuntu 18.04 LTS. Il semble que pipenv cherche un interpréteur python plutôt que d'utiliser celui sous lequel il est exécuté, et ce faisant, il parcourt PATH dans l'ordre inverse. J'ai plusieurs environnements python installés, et chaque fois que j'en supprime manuellement un de PATH, pipenv en trouve un différent et se plaint de celui-ci à la place.

Je vois le même problème sous WSL avec Ubuntu 18.04 LTS. pipenv install --python $(which python3) fonctionne mais quand je fais par la suite pipenv shell , il ne trouve pas les dépendances qu'il aurait dû télécharger.

Je suis également concerné, en utilisant WSL 1 et Ubuntu 18.04. Solution --python $(which python) contournement

La raison de la dernière partie de l'exception, c'est-à-dire ce bit:

  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/utils.py", line 68, in get_python_version
    combine_stderr=False, write_to_stdout=False)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 314, in run
    write_to_stdout=True
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 162, in _create_subprocess
    sys.stderr.write("Error %s while executing command %s", exc, " ".join(cmd._parts))
TypeError: write() takes exactly one argument (3 given)

... est qu'il y a un bogue dans l'appel pour imprimer une erreur lors de la gestion de la première exception. Ce bogue semble avoir déjà été corrigé dans master en janvier 2019 - https://github.com/pypa/pipenv/commit/574fe7308d9ac81d64da954722f35c9eee0dd467#diff -a59595db75020aeb9f688d6a0b4818e6L162. Mais comme la dernière version de pipenv est 2018.11.26, j'imagine que la plupart n'ont pas de version fixe.

On peut le patcher manuellement. Ouvrez /usr/local/lib/<your-python-version>/site-packages/pipenv/vendor/vistir/misc.py , accédez à la ligne 162 et modifiez ceci:

sys.stderr.write("Error %s while executing command %s", exc, " ".join(cmd._parts))

... pour ça:

sys.stderr.write(f"Error {exc} while executing command " + " ".join(cmd._parts))

Vous obtiendrez maintenant un rapport d'exception plus précis. Dans mon cas, le problème est lié au fait que pipenv basé sur WSL Linux détecte les installations Python basées sur Windows et a des difficultés à les exécuter, ce qui est assez évident:

Error [Errno 8] Exec format error: '/mnt/c/Users/<user>/AppData/Local/Microsoft/WindowsApps/python3.exe' while executing command /mnt/c/Users/<user>/AppData/Local/Microsoft/WindowsApps/python3.exe -c import sys; print(['Traceback (most recent call last):\n', '  File "/usr/local/lib/python3.6/dist-packages/pipenv/vendor/vistir/contextmanagers.py", line 150, in spinner\n    yield _spinner\n', '  File "/usr/local/lib/python3.6/dist-packages/pipenv/vendor/vistir/misc.py", line 314, in run\n    write_to_stdout=True\n', '  File "/usr/local/lib/python3.6/dist-packages/pipenv/vendor/vistir/misc.py", line 160, in _create_subprocess\n    combine_stderr=combine_stderr)\n', '  File "/usr/local/lib/python3.6/dist-packages/pipenv/vendor/vistir/misc.py", line 134, in _spawn_subprocess\n    return subprocess.Popen(cmd, **options)\n', '  File "/usr/lib/python3.6/subprocess.py", line 729, in __init__\n    restore_signals, start_new_session)\n', '  File "/usr/lib/python3.6/subprocess.py", line 1364, in _execute_child\n    raise child_exception_type(errno_num, err_msg, err_filename)\n', "OSError: [Errno 8] Exec format error: '/mnt/c/Users/<user>/AppData/Local/Microsoft/WindowsApps/python3.exe'\n"]

Pour les utilisateurs WSL, je pense que le problème peut être résolu en garantissant que toutes les exigences de votre version Python dans Pipfile correspondent _exactement_ à une installation Python basée sur Linux, par exemple

[requires]
python_version = "3.6.8"  # Make sure this exactly matches an installed version, or remove it.

J'espère que cela t'aides.

Je ne sais pas à quel point cela aide, mais supprimer le Pipfile, exécuter pipenv lock , puis remettre le contenu de l'ancien Pipfile et exécuter pipenv install fonctionne pour moi en permanence.

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