¿Cuáles son los equivalentes de Python al paquete de Ruby / caja de Perl?

93

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 execsubcomando ( 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?

riywo
fuente
4
No, no todos los usuarios de Python usan virtualenv. Personalmente, nunca lo he necesitado.
Fred Foo
No tengo conocimiento de algo exactamente como el paquete de Ruby (que no sabía hasta ahora, por cierto). Lo que suelo hacer es usar virtualenv y pip y setuptools, o distutils o cualquier sistema de distribución que encuentre primero en Google :) También tengo curiosidad por una respuesta, pero esta es mi solución la mayor parte del tiempo.
brandizzi
pipenvy se shovelmencionan a continuación son opciones más modernas desde que se hizo esta pregunta.
Jim Meyer
Ni pipenv ni pala son equivalentes. La pala no se parece en nada a un paquete, más bien a un rastrillo. La gestión de la dependencia de Python está bastante rezagada. Se fusionó con pip Sin embargo un día ( pypi.org/project/pipfile ) ...
Nomas primer

Respuestas:

72

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:

  1. Instalación de paquetes (instalación de gemas)

    pip install mypackage
  2. 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:

    nose==1.1.2
    django<1.3
    PIL

    Más tarde, cuando quieras instalar esas dependencias, harías:

    $ pip install -r requirements.txt

    Una forma sencilla de ver todos sus paquetes actuales en la sintaxis del archivo de requisitos es hacer lo siguiente:

    $ pip freeze

    Puedes leer más sobre esto aquí. .

  3. 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:

    $ pip install gunicorn
    $ gunicorn -h 
  4. Paquete de gemas para instalar desde caché (paquete de empaquetado)

    Hay pip bundley pip 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.

Denys Shabalin
fuente
46
Lo mejor de bundler es exactamente que la parte virtualenv está integrada y en la mayoría de los casos no se requieren derechos de administrador. De hecho, el paquete puede ser la única joya que se necesita a nivel mundial. bundle install --path vendorinstala todo localmente y bundle execes lo suficientemente inteligente como para averiguarlo. No es necesario realizar cambios de entorno explícitos.
Debilski
11
No creo que el punto 3 sea correcto. La simple ejecución de un ejecutable ruby ​​se puede hacer con o sin bundle exec. El punto bundle execes que altera el entorno Gemfileantes de ejecutar el ejecutable. Pip no tiene equivalente a bundle exec, aunque virtualenv podría.
Sean Mackesey
@SeanMackesey cada vez que ejecuta la activación del entorno virtualenv, inmediatamente se convierte en dentro del entorno, por ejemplo, python apunta al que está en el entorno, no al que está instalado globalmente, pythonpath es correcto con respecto al entorno, todas las aplicaciones también se ejecutan desde ese entorno.
Denys Shabalin
8
Lo principal de bundler es que ahora es un estándar de facto, puede garantizar prácticamente que CUALQUIER proyecto de ruby ​​de prácticamente cualquier tamaño, tendrá un Gemfileasiento en su raíz, y usted puede bundle instally está listo para comenzar, o bundle --deploymenty ' 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.
Ocodo
15

Puede usar pipenv , que tiene una interfaz similar con bundler.

$ pip install pipenv

Pipenv crea virtualenv automáticamente e instala dependencias desde Pipfileo Pipfile.lock.

$ pipenv --three           # Create virtualenv with Python3
$ pipenv install           # Install dependencies from Pipfile
$ pipenv install requests  # Install `requests` and update Pipfile
$ pipenv lock              # Generate `Pipfile.lock`
$ pipenv shell             # Run shell with virtualenv activated

Puede ejecutar el comando con el alcance virtualenv como bundle exec.

$ pipenv run python3 -c "print('hello!')"
nonileno
fuente
3

Hay un pbundler clon .

La versión que está actualmente en pip simplemente lee el requirements.txtarchivo 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).

kousu
fuente
Este proyecto parece haberse desvanecido. Considere Poesía: stackoverflow.com/a/61771381/115075
bb.
1

Escribí uno: https://github.com/Deepwalker/pundler . En PIP su pundlenombre ya estaba tomado.

Utiliza requirements(_\w+)?.txtarchivos como sus dependencias deseadas y crea frozen(_\w+)?.txtarchivos con versiones congeladas.

Sobre la (_\w+)?cosa - esto es envs. Puede crear requirements_test.txt y luego usar PUNDLEENV=testpara 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.

Mihail Krivushin
fuente
1

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).

cama y desayuno.
fuente
1

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.

Jim Meyer
fuente
0

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).

Yonsy Solis
fuente