Sé sobre virtualenv y pip. Pero estos son un poco diferentes del empaquetado / cartón.
Por ejemplo:
- pip escribe la ruta absoluta a shebang o activa el script
- pip no tiene el
exec
subcomando (bundle exec bar
) - virtualenv copia el intérprete de Python a un directorio local
¿Todos los desarrolladores de Python usan virtualenv / pip? ¿Existen otras herramientas de administración de paquetes para Python?
pipenv
y seshovel
mencionan a continuación son opciones más modernas desde que se hizo esta pregunta.Respuestas:
Por lo que he leído sobre bundler, pip sin virtualenv debería funcionar bien para ti. Puede pensar en ello como algo entre el comando gem normal y el empaquetado. Cosas comunes que puede hacer con pip:
Instalación de paquetes (instalación de gemas)
Dependencias e instalación masiva (gemfile)
Probablemente la forma más sencilla es utilizar los archivos requirements.txt de pip. Básicamente, es solo una lista simple de paquetes requeridos con posibles restricciones de versión. Podría verse algo como:
Más tarde, cuando quieras instalar esas dependencias, harías:
Una forma sencilla de ver todos sus paquetes actuales en la sintaxis del archivo de requisitos es hacer lo siguiente:
Puedes leer más sobre esto aquí. .
Ejecución (paquete ejecutivo)
Todos los paquetes de Python que vienen con archivos ejecutables generalmente están disponibles directamente después de la instalación (a menos que tenga una configuración personalizada o sea un paquete especial). Por ejemplo:
Paquete de gemas para instalar desde caché (paquete de empaquetado)
Hay
pip bundle
ypip zip/unzip
. Pero no estoy seguro de si mucha gente lo usa.ps Si te importa el aislamiento del entorno, también puedes usar virtualenv junto con pip (son amigos cercanos y funcionan perfectamente juntos). De forma predeterminada, pip instala paquetes en todo el sistema que pueden requerir derechos de administrador.
fuente
bundle install --path vendor
instala todo localmente ybundle exec
es lo suficientemente inteligente como para averiguarlo. No es necesario realizar cambios de entorno explícitos.bundle exec
. El puntobundle exec
es que altera el entornoGemfile
antes de ejecutar el ejecutable. Pip no tiene equivalente abundle exec
, aunque virtualenv podría.Gemfile
asiento en su raíz, y usted puedebundle install
y está listo para comenzar, obundle --deployment
y ' Simplemente se ejecutará en un servidor con poco más que hacer, siempre que la máquina tenga la versión requerida de ruby. Python simplemente no tiene equivalente. Las herramientas están ahí, la ubicuidad cultural no.Puede usar pipenv , que tiene una interfaz similar con bundler.
Pipenv crea virtualenv automáticamente e instala dependencias desde
Pipfile
oPipfile.lock
.Puede ejecutar el comando con el alcance virtualenv como
bundle exec
.fuente
Hay un pbundler clon .
La versión que está actualmente en pip simplemente lee el
requirements.txt
archivo que ya tiene, pero está muy desactualizada. Tampoco es totalmente equivalente: insiste en hacer unvirtualenv
. Bundler, me doy cuenta, solo instala los paquetes que faltan y le da la opción de dar su contraseña de sudo para instalar en los directorios de su sistema o de reiniciar, lo que no parece ser una característica de pbundler.Sin embargo, la versión en git es una reescritura casi completa para estar mucho más cerca del comportamiento de Bundler ... incluyendo tener un "Cheesefile" y ahora no ser compatible con requirements.txt. Esto es desafortunado, ya que requirements.txt es el estándar de facto en Pythonland, e incluso hay trabajo oficial con el sello BDFL para estandarizarlo . Cuando entre en vigor, puede estar seguro de que algo como pbundler se convertirá en el estándar de facto. Por desgracia, todavía no hay nada estable que yo sepa (pero me encantaría que me demuestren que estoy equivocado).
fuente
Escribí uno: https://github.com/Deepwalker/pundler . En PIP su
pundle
nombre ya estaba tomado.Utiliza
requirements(_\w+)?.txt
archivos como sus dependencias deseadas y creafrozen(_\w+)?.txt
archivos con versiones congeladas.Sobre la
(_\w+)?
cosa - esto es envs. Puede crear requirements_test.txt y luego usarPUNDLEENV=test
para usar estos departamentos en su ejecución con los de requirements.txt al lado.Y sobre virtualenv: no necesitas uno, es lo que pundle toma de bundler en primera cabeza.
fuente
Python Poetry es el más cercano al paquete de Ruby a partir de 2020 (y ya desde 2018). Ya tiene más de dos años, sigue muy activo, tiene gran documentación. Uno podría quejarse de que
curl-pipe-python
-style es la forma recomendada de instalación, pero existen alternativas, por ejemplo, homebrew en macOS.Utiliza virtualenvs entre bastidores (en contraste con el empaquetador), pero proporciona y utiliza un archivo de bloqueo, se encarga de las subdependencias, se adhiere a las restricciones de versión especificadas y permite actualizar automáticamente los paquetes obsoletos. Incluso hay autocompletado para su shell favorito.
Con su uso de un archivo pyproject.toml, también va un poco más lejos que bundler (más cerca de una gemspec. También es comparable a npm e yarn de JavaScript y TypeScript).
Poetrify (un proyecto complementario) ayuda a convertir proyectos de requirements.txt a pyproject.toml para Poetry.
El archivo de bloqueo se puede exportar a requirements.txt por
poetry export -f requirements.txt > requirements.txt
, si lo necesita para otras herramientas (o en el caso poco probable de que desee volver).fuente
Yo diría que vale la pena echarle un vistazo a Shovel . Fue desarrollado específicamente para la versión Pythonish de Rake. No hay mucha actividad de compromiso en el proyecto, pero parece estable y útil.
fuente
No, no, todos los desarrolladores usan virtualenv y / o pip, pero muchos desarrolladores usan / prefieren estas herramientas
Y ahora, para las herramientas de desarrollo de paquetes y los diferentes entornos, esa es su verdadera pregunta. Existen otras herramientas como Buildout ( http://www.buildout.org/en/latest/ ) para el mismo propósito, aislar el sistema de compilación Python de su entorno para cada proyecto que administra. Durante algún tiempo utilizo esto, pero no ahora.
Los entornos independientes por proyecto, en Python son un poco diferentes a la misma situación en Ruby. En mi caso, uso pyenv ( https://github.com/yyuu/pyenv ) que es algo así como rbenv pero, para Python. diferentes versiones de python y virtualenvs por proyecto y, en estos entornos aislados, puedo usar pip o easy-install (si es necesario).
fuente