Pipenv: Use venv en lugar de virtualenv si está disponible

Creado en 23 ene. 2017  ·  38Comentarios  ·  Fuente: pypa/pipenv

Me pregunto si vale la pena usar venv si está disponible en lugar de virtualenv . Eso también evitaría tener que instalar virtualenv en primer lugar.

Comentario más útil

Insto a @kennethreitz a reconsiderar su comentario aquí. La documentación estándar recomienda el uso de python3 -m venv en lugar de virtualenv. Personalmente, me desanime el uso de pipenv porque usa virtualenv. Solo uso Python 3 y solo uso venv hoy en día.

Todos 38 comentarios

no lo creo, prefiero usar el comando virtualenv personalmente

¿Quizás sea posible hacer que ambas opciones coexistan? Al navegar casualmente a través de la fuente, no veo nada específicamente acoplado con Virtualenv, excepto el comando utilizado para crear el env. Virtualenv siempre puede ser el predeterminado, pero el usuario puede (por ejemplo) pasar --venv para crear .venv con python3 -m venv lugar de virtualenv .

Honestamente, confiaría únicamente en pipenv y no me importaría si se usara virtualenv o venv, pero pensé que podríamos aprovechar las funciones incorporadas cuando estuvieran disponibles.

Insto a @kennethreitz a reconsiderar su comentario aquí. La documentación estándar recomienda el uso de python3 -m venv en lugar de virtualenv. Personalmente, me desanime el uso de pipenv porque usa virtualenv. Solo uso Python 3 y solo uso venv hoy en día.

@bulletmark Ahora que Pipenv delega casi toda la administración de Virtualenv en Pew, es aún más difícil cambiar, pero hay un plan para que Pew admita venv sin embargo (berdario / pew # 67), por lo que todavía hay posibilidades. Si Pew puede hacer que funcione, sería mucho más fácil (y al menos tendría más sentido para mí) implementar el soporte venv en Pipenv.

¡@uranusjr suena genial!

Personalmente, nunca he usado venv , de ahí mi aprensión hacia él. Aunque estoy seguro de que es bueno.

Las cosas están funcionando bien ahora mismo. No es necesario cambiar las cosas que no están rotas.

Finalmente encontré este hilo porque mi sistema está roto.

Si crea un entorno con virtualenv en Python 3.X, y luego actualiza a Python 3.Y, virtualenv no funciona porque sabe que ya tiene las bibliotecas compartidas que Python necesita. Usando venv puede ejecutar python3 -m venv --upgrade .

Esta sería una buena característica.

Esto definitivamente sería bueno y se siente en línea con la dirección de Python

No usar venv (y en su lugar usar virtualenv) es una maravilla total para mí: no puedo usar Pipenv. No puedo usar virtualenv debido a su comportamiento frustrante de copiar el binario de Python y, sin embargo, dependiendo de las bibliotecas compartidas, como dhouck encontró arriba para su disgusto arriba. Esto rompe virtualenvs todo el tiempo (cada vez que se actualiza Python del sistema, dejando el binario colgando) y copia innecesariamente el binario de Python sin absolutamente ningún beneficio.

Si pipenv es el futuro de Python, debería usar venv en Python 3 de forma predeterminada (y advertir cuando no lo use). Está integrado en Python 3 y es la herramienta recomendada. Es muy extraño que Pipenv ahora también sea una herramienta recomendada, pero no usa venv.

venv por la naturaleza de ser parte de Python tiene acceso a los componentes internos de Python, lo que significa que puede hacer las cosas de la manera correcta con muchos menos hacks. Por ejemplo, virtualenv tiene que copiar el binario del intérprete de Python en el entorno virtual para engañarlo y hacerle creer que está aislado, mientras que venv puede usar un archivo de configuración que lee el binario de Python en su ubicación normal para que sepa que se supone que debe actuar. como si estuviera en un entorno virtual. Así que se puede pensar en venv en virtualenv bien hecho, con la bendición y el apoyo de los desarrolladores de Python.

Fuente: https://www.reddit.com/r/learnpython/comments/4hsudz/pyvenv_vs_virtualenv/

Empecé con berdario / pew # 173, pero no he tenido mucho tiempo para progresar. Como se mencionó anteriormente, Pipenv lo admitirá automáticamente una vez que Pew lo haga. Me gustaría un poco de ayuda si alguien está interesado en llevar venv a Pipenv. El problema principal en este momento sería aprobar las pruebas.

Actualización rápida sobre el soporte de venv: no sucederá, al menos en un futuro próximo. venv simplemente no es lo suficientemente bueno para que esto suceda. Si realmente le importa esto, diríjase al rastreador de errores de Python y eche una mano. De lo contrario, manténgase en virtualenv .

venv es la herramienta recomendada para Python, y no está rota, como virtualenv (re: copiar el binario de Python y luego se rompe cuando se actualizan las librerías de Python). El error al que vinculó es sobre la combinación de venv y virtualenv, ¿que no es lo que estamos pidiendo?

Desafortunadamente, es muy común que las herramientas se basen en virtualenv. Travis, por ejemplo, usa virtualenv para crear un entorno de construcción para usted, como lo mencionó el reportero original. También es la base de Pipsi, que es una de las formas recomendadas de instalar Pipenv. Si venv no puede funcionar bien en su interior. Está en muchos lugares sin que usted lo sepa. El soporte de Venv estaría medio roto y te mordería de formas inesperadas si no funciona bien con virtualenv.

Lo entiendo, pero en este punto se recomienda Pipenv, y se recomienda venv, y están en conflicto. Es un estado muy extraño.

Estoy totalmente de acuerdo en que está en un estado extraño, por eso estoy tratando de arreglarlo :) No estoy diciendo que no se arreglará, pero primero necesita que ocurran cambios ascendentes, y no hay nada que pueda hacer hasta que ocurrir. Publico el enlace no como una excusa para dejar de trabajar en él, sino para que la gente sepa dónde poner los esfuerzos primero para ayudar a mejorar esta situación.

Entonces, ¿tal vez no sería una locura mantener abierto este tema?

Este es un problema de banca, no un problema de pipenv.

venv simplemente no es lo suficientemente bueno para que esto suceda. Si realmente le importa esto, diríjase al rastreador de errores de Python y eche una mano.

No es un problema de venv, sino de virtualenv. He publicado una explicación en el rastreador de problemas.
cc @uranusjr

Hay una palabra alrededor ->
Use venv para crear un virtualenv primero y luego ejecute pipenv install . Por ejemplo:

mkdir -p /tmp/try
cd /tmp/try
python3 -m venv .venv
pipenv --venv  # /tmp/try/.venv
pipenv install xxx

🙈

Solo una nota:

La solución anterior funciona principalmente, pero pipenv run ... me falla porque no hay activate_this.py debajo de .venv/bin . Si se cree en el problema 21496 , no hay ningún plan para agregar este archivo a venv. Entonces, incluso si pew soluciona esto, es probable que pipenv todavía tenga un problema.

Usar virtualenv, usar el módulo system tk en macOS es imposible. Pero usando venv, es posible.
Quiero usar venv con pipenv (puede ser opcional).

Ver también: # 1416

No quiero sonar cínico, pero quiero que alguien realmente escriba el código para respaldar esto si realmente les importa tanto. He conocido a muchas personas que dicen que se sienten "fuertemente" por esto, pero que yo sepa, soy el único que realmente hace algo. Y fallé. Esto no es tan simple como crees. Si cree que puede hacerlo mejor, haga algo. Si no quiere, tome lo que pueda conseguir.

(Kenneth y yo, y probablemente erin y nate, también intentamos hacer esto con venv mucho antes en el proyecto y también fallamos por razones de compatibilidad)

Esto estaría bien, todos están de acuerdo. Me encantaría verlo funcionando en plataformas y versiones de Python.

Me gustaría señalar otra razón por la que venv probablemente sería una mejor opción que virtualenv:

Uno de los aspectos más desagradables de la implementación de virtualenv es que tiene que tener su propia copia del módulo del sitio, que se usa para todos los virtualenv independientemente de la versión de Python con la que se hayan creado.
- de https://github.com/pypa/virtualenv/issues/228#issuecomment -4165148

Esto significa, por ejemplo, que rlcompleter está deshabilitado por defecto y eso es una gran pérdida de usabilidad en mi opinión.

Además, dado que este es un problema que afecta a varios de sus usuarios, sugeriría mantenerlo abierto hasta que se solucione el problema, incluso si está esperando que ocurran algunos cambios en sentido ascendente.

De nuevo. Sabemos que sería mejor. En realidad, no es posible. ¿Qué crees que tiene un impacto más negativo, romper completamente la funcionalidad para un gran segmento de usuarios o hacer que algunos usuarios tengan que activar las funciones de readline?

Estoy seguro de que esto es un inconveniente, también es un inconveniente que solo parece haber personas que lo exigen y, sin embargo, nadie ofrece una implementación que funcione. Hemos tratado. Hasta que algo cambie drásticamente, no tenemos planes de apoyar a venv y, por lo tanto, no tenemos planes de abrir este número.

@techalchemy Si entiendo correctamente, pypa / virtualenv # 1095 es el lugar correcto para discutir esto?

Parece correcto, vi que tox tiene una solución alternativa, así que tal vez eso funcione si alguien lo transfiera

¡banco de iglesia! qué discusión ... si esto de los bancos no es tan crucial, ¿sería posible dejarlos por completo junto con virtualenv y dejar que pipenv, venv y python vayan de la mano, ya que todos se recomiendan entre sí?

Las soluciones de gestión de dependencias / entorno virtual para Python son un terreno demasiado salvaje en este momento, y es necesario hacer algunos sacrificios, en mi humilde opinión.

Esto podría asustar a muchas personas que aún no están listas para dejar de usar virtualenv, pero podría planificarse para uno de los próximos lanzamientos importantes (si es técnicamente factible). El cambio es inevitable, es solo una cuestión de tiempo.

@doganmeh Podemos abandonar virtualenv por completo, creando un producto equivalente que solo admita Python 3.3 o superior, pero supongo que sería más fácil hacer ese otro proyecto.

Solo una nota:

La solución anterior funciona principalmente, pero pipenv run ... me falla porque no hay activate_this.py debajo de .venv/bin . Si se cree en el problema 21496 , no hay ningún plan para agregar este archivo a venv. Entonces, incluso si pew soluciona esto, es probable que pipenv todavía tenga un problema.

¿Es eso realmente necesario? Una vez que haya creado un entorno virtual con venv, no necesita activarlo para usarlo. Simplemente ejecuta usando el binario de Python del directorio venv / bin.

FWIW, esto está relacionado (y lo que me trajo aquí): http://matplotlib.org/faq/osx_framework.html

En un virtualenv , se usa una compilación sin marco incluso cuando el entorno se crea a partir de una compilación de marco ( error virtualenv # 54 , error virtualenv # 609 ).

La solución es no usar virtualenv, sino el venv de stdlib , que proporciona una funcionalidad similar pero sin presentar este problema.

Dejar el soporte de Python 2.7 / virtualenv para mí no me parece una idea particularmente terrible, si permite que pipenv dependa del stdlib de una versión de Python cuyo soporte no está a punto de caducar. Siempre que no corrompa ninguna otra parte de la cadena pipenv herramientas

Me gustaría poder contribuir con código real, pero no creo que tenga la experiencia necesaria para hacerlo o el tiempo: fruncir el ceño: Lo mejor que puedo hacer es agregar a la discusión en este momento.

agregando mi voz aquí; Acabo de presionar esto por el mismo problema que @dmtucker .

Actualmente estoy recurriendo a ignorar pipenv por completo para este proyecto cuando estoy en mi mac, y por ahora estoy haciendo el entorno a mano con venv.

+1 para usar venv.
virtualenv tiene muchos errores que no corrigen .
pipenv completamente útil en Windows 10 con Python 3.7 de la Tienda Windows ( error virtualenv

virtualenv se está moviendo al modelo venv; consulte https://github.com/pypa/virtualenv/issues/1366 , que generará pyvenv.cfg y todas las cosas buenas, por lo que esto debería resolverse a través de eso.

---------- Mensaje reenviado ---------
De: Dan Ryan [email protected]
Fecha: lun, 26 de noviembre de 2018, 2:39 p.m.
Asunto: Re: [pypa / pipenv] Use venv en lugar de virtualenv si está disponible (n. ° 15)
Para: pypa / pipenv [email protected]
Cc: Suscrito [email protected]

Parece correcto, vi que tox tiene una solución, así que tal vez eso funcione si
alguien lo portó

-
Estás recibiendo esto porque estás suscrito a este hilo.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/pypa/pipenv/issues/15#issuecomment-441533872 , o silenciar
la amenaza
https://github.com/notifications/unsubscribe-auth/AqyQvrs-RNNTb1YhxaDCWDLpRxrZLKoxks5uy4ydgaJpZM4Lqk2f
.

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