Pipenv: 2018.11.26: pipenv emite errores de pitones al crear un virtualenv

Creado en 6 dic. 2018  ·  30Comentarios  ·  Fuente: pypa/pipenv

Descripcion del problema

Posiblemente relacionado con # 3229, pipenv continúa arrojando errores al crear 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)

Resultado Esperado

No se esperaba ningún registro de errores mientras simplemente se creaba un virtualenv.

Resultado actual

La creación virtualenv falla.

Pasos para replicar

$ pipenv --three

pipenv --support también emite estos errores y no recopila información de soporte.

Type Regression Release Blocker Vendored Dependencies

Comentario más útil

El lanzamiento actual me parece seguro. Otra solución temporal que vi en un número anterior fue pasar específicamente una ruta python así:

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

He estado haciendo esto con éxito por el momento: muecas:

Todos 30 comentarios

Parece que /usr/local/bin/pythonz ya no es una ruta válida.

Hmm. ¿Debería haberlo sido alguna vez? Nunca he usado pythonz directamente. Pensé que era solo una dependencia de pipenv que administraba cuando instalé pipenv.

Por diversión, acabo de desinstalar y reinstalar pipenv 2018.11.26 y todavía tengo el problema.

¿Puede proporcionar la salida de pipenv --support ? Y para confirmar, no, no debería haber sido

Oh, NVM acaba de ver tu mensaje. Solo quiero confirmar que no hay una versión falsa de pipenv en su camino en algún lugar. ¿Puede comprobar which pipenv y python -m pipenv --version

$ which pipenv
/usr/local/bin/pipenv

python -m pipenv --version devolvió No module named pipenv porque tengo Python 2 y Python 3 instalados a través de Homebrew, y python ejecuta Python 2.7. Según una recomendación anterior aquí, tengo pipenv instalado en Python 3. Así que lo sustituí en python3 y obtuve:

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

¡Gracias!

Ah ok. Y sí, el error tiene sentido. Lo etiquetaré aguas arriba y me aseguraré de que se arregle

¿Alguna noticia sobre cuándo se lanzará una solución para esto? Tengo este problema que me impide instalar los requisitos de pipenv. He tratado solución @commandtab 's con esa suerte.

No puedo hacer que pipenv funcione en absoluto con la versión actual.

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

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

Intenté instalar con python3.7 desde homebrew, y el mismo problema.

Parece que no hay urgencia aquí, o que no es un gran problema. ¿Me falta algo o pipenv está completamente roto con la versión actual?

El lanzamiento actual me parece seguro. Otra solución temporal que vi en un número anterior fue pasar específicamente una ruta python así:

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

He estado haciendo esto con éxito por el momento: muecas:

Esa solución no me funcionó. Tuve que degradar a 2018.10.13 y luego usar la solución en ese hilo :

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

Por lo que puedo decir, pipenv se ha roto por completo desde octubre.

@techalchemy ¿ Alguna noticia sobre una corrección de etiquetas ascendentes? La creación de pipenv virtualenv aún requiere soluciones alternativas para la invocación.

Gracias ❤️

Esto fue un poco difícil con todas las otras correcciones que debían integrarse, pero creo que CI pasará ahora y esto se solucionará con # 3330, lo siento por el problema.

Ah ok. Y sí, el error tiene sentido. Lo etiquetaré aguas arriba y me aseguraré de que se arregle

Aún el problema persiste, cualquier idea de cuándo se lanzará esta solución.

El mismo problema aquí.

Puede confirmar que la solución alternativa de @ command-tab aún funciona.

Esto definitivamente todavía sucede con homebrew pipenv y python ... un poco sorprendido de que no haya una prueba para cubrirlo viendo cuánto tiempo ha existido este problema ...

También puedo confirmar que este problema sigue ocurriendo, a pesar de que este problema de GitHub está cerrado.

¿Necesitan los mantenedores que se cree un nuevo problema?

El mismo problema con Ubuntu 18 LTS instalado en el subsistema de Windows para Linux.

La solución me funciona.

@techalchemy, este problema todavía parece existir. ¿Puede volver a abrirlo o dejar en claro que desea que se cree un nuevo problema?

Gracias.

El mismo problema con Ubuntu 18 LTS instalado en el subsistema de Windows para Linux.

igual que aquí

@techalchemy por favor mira de nuevo

El mismo problema aquí en macOs Mojave y Python 3.7

Yo también:

  • Catalina
  • Python 3.7.

Todo funciona bien una vez que comento esta línea en mi Pipfile:

[requires]

#python_version = "3.7.4"

Yo también:

  • Catalina
  • Python 3.7.

Todo funciona bien una vez que comento esta línea en mi Pipfile:

[requires]

#python_version = "3.7.4"

ahhhh esto funcionó para mí, ¡gracias!

@JarredStanford @edsu
Esto también funcionó para mí en WSL en VSCode (no probé un shell externo ya que funcionó bien para un proyecto diferente).

@ pestaña-comando
Agregar "--python = which python3 " también funcionó. No intenté agregar "--three" y parece que no es necesario para mi caso de uso / versión.

Después de obtener ambas soluciones y pude hacer que funcionara, las eliminé e intenté una tercera vez para asegurarme de que el entorno todavía estaba causando un problema (narrador: sí).

@techalchemy
Estoy pensando que esto puede no estar "completamente arreglado" en 3330. Podría ser un problema tangencial que cause los mismos síntomas. En mi caso, estoy usando WSL y me pregunto si 'python3' y 'python3.exe' ambos en mi ruta WSL parece sospechoso.

¿Crees que es mejor que abra un nuevo problema, te gustaría que ejecutara diagnósticos adicionales o algo más?

Estoy usando wsl2 con arclinux (manjaro)
Parece que pipenv está llamando a Python en Windows env del host para instalar
por lo que necesitamos definir dónde encontrar la pitón con:
pipenv --python=<PATH_TO_PYTHON>
o
pipenv --python=which python3

funciona para mi.

Puede confirmar que esto sucede en WSL con Ubuntu 18.04 LTS. Parece que pipenv está buscando un intérprete de Python en lugar de usar el que se está ejecutando, y al hacerlo, está atravesando PATH en orden inverso. Tengo varios entornos de Python instalados, y cada vez que elimino manualmente uno de PATH, pipenv encontrará uno diferente y se quejará de ese.

Veo el mismo problema en WSL con Ubuntu 18.04 LTS. pipenv install --python $(which python3) funciona pero cuando luego hago pipenv shell , no puede encontrar las dependencias que debería haber descargado.

También estoy afectado, usando WSL 1 y Ubuntu 18.04. La solución alternativa --python $(which python) funciona.

El motivo de la última parte de la excepción, es decir, este 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)

... es porque hay un error en la llamada para imprimir un error al manejar la primera excepción. Este error parece que ya se corrigió en el maestro en enero de 2019: https://github.com/pypa/pipenv/commit/574fe7308d9ac81d64da954722f35c9eee0dd467#diff -a59595db75020aeb9f688d6a0b4818e6L162. Pero dado que la última versión de pipenv es 2018.11.26, imagino que la mayoría no tiene una versión fija.

Uno puede parchearlo manualmente. Abra /usr/local/lib/<your-python-version>/site-packages/pipenv/vendor/vistir/misc.py , navegue hasta la línea 162 y cambie esto:

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

... a esto:

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

Ahora obtendrá un informe de excepción más preciso. En mi caso, el problema es que pipenv basado en Linux WSL detecta las instalaciones de Python basadas en Windows y tiene problemas para ejecutarlas, lo cual es algo obvio:

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"]

Para los usuarios de WSL, creo que el problema puede aliviarse asegurándose de que cualquier requisito en su versión de Python en Pipfile coincida _exactamente_ con una instalación de Python basada en Linux, por ejemplo

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

Espero que esto ayude.

No estoy seguro de cuánto ayuda esto, pero eliminar el Pipfile, ejecutar pipenv lock y luego volver a poner el contenido del antiguo Pipfile y ejecutar pipenv install funciona para mí de forma permanente.

¿Fue útil esta página
0 / 5 - 0 calificaciones