2012-01-04 14 views
77

Sé acerca de virtualenv y pip. Pero estos son un poco diferentes de bundler/carton.¿Cuáles son los equivalentes de Python para el paquete de Ruby/el cartón de Perl?

Por ejemplo:

  • pip escribe la ruta absoluta al tinglado o activar la escritura
  • pip no tiene el comando exec sub (bundle exec bar)
  • virtualenv copias del intérprete de Python a un directorio local

¿Todos los desarrolladores de Python usan virtualenv/pip? ¿Hay otras herramientas de administración de paquetes para Python?

+4

No, no todos los usuarios de Python usan virtualenv.Yo personalmente nunca lo necesité. –

+0

No tengo conocimiento de algo exactamente igual a Ruby bundler (que hasta ahora no conocía, por cierto). Lo que hago es usar tanto virtualenv _and_pip _and_ setuptools_ o distutils o el sistema de distribución que encuentro primero en Google :) También tengo curiosidad por una respuesta, pero esta es mi solución la mayor parte del tiempo. – brandizzi

+0

'pipenv' y' shovel' mencionados a continuación son opciones más modernas ya que se hizo esta pregunta. –

Respuesta

68

Por lo que he leído sobre bundler - pip without virtualenv debería funcionar bien para usted. Puedes pensar que es algo entre el comando regular de gemas y el paquete. cosas comunes que se pueden hacer con pip:

  1. la instalación de paquetes (gem install)

    pip install mypackage 
    
  2. Dependencias y mayor de instalar (Gemfile)

    Probablemente la manera más fácil es usar los archivos de requirements.txt de pip. Básicamente es solo una lista simple de los paquetes necesarios con posibles restricciones de versión. Podría ser algo como:

    nose==1.1.2 
    django<1.3 
    PIL 
    

    Más tarde, cuando te gustaría instalar esas dependencias que haría:

    $ pip install -r requirements.txt 
    

    Una manera simple de ver todos los paquetes actuales en la sintaxis requisitos fichero es la de hacer:

    $ pip freeze 
    

    puede leer mas sobre esto here.

  3. ejecución (exec bundler)

    Todos los paquetes de Python que vienen con los archivos ejecutables son por lo general directamente disponibles después de la instalación (a menos que tenga la configuración personalizada o se trata de un paquete especial). Por ejemplo:

    $ pip install gunicorn 
    $ gunicorn -h 
    
  4. gemas del paquete de instalación de la memoria caché (paquete bundler)

    Hay pip bundle y pip zip/unzip. Pero no estoy seguro de si mucha gente lo usa.

p.s. Si le importa el aislamiento del entorno, también puede usar virtualenv junto con pip (son amigos cercanos y funcionan perfectamente juntos). Por defecto, pip instala paquetes en todo el sistema que pueden requerir derechos de administrador.

+36

Lo mejor de bundler es 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 vendor' instala todo localmente y' bundle exec' es lo suficientemente inteligente como para resolverlo. No es necesario realizar cambios explícitos en el entorno. – Debilski

+7

No creo que el punto 3 sea correcto. Simplemente ejecutando un ejecutable de ruby ​​se puede hacer con o sin 'bundle exec'. El objetivo de 'bundle exec' es que altera el entorno según' Gemfile' antes de ejecutar el ejecutable. Pip no tiene equivalente a 'bundle exec', aunque virtualenv podría. –

+0

@SeanMackesey siempre que ejecute activar el entorno virtualenv, inmediatamente se convertirá en el entorno, p. python apuntan a uno en el env, no instalado globalmente, pythonpath es correcto con respecto a env, todas las aplicaciones también se ejecutan desde ese entorno. –

4

Hay un clon pbundler.

La versión que está actualmente en pip simplemente lee el archivo requirements.txt que ya tiene, pero está muy desactualizado. Tampoco es totalmente equivalente: insiste en hacer un virtualenv. Bundler, observo, solo instala qué paquetes faltan, y le da la opción de dar su contraseña de sudo para instalar en los directorios de su sistema o 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 es compatible con requirements.txt. Esto es desafortunado, ya que requirements.txt es el estándar de facto en pythonland, e incluso hay trabajos con sello BDFL oficial en standardize it. Cuando eso entre en vigor, puedes estar seguro de que algo como pbundler se convertirá en el estándar de facto. Por desgracia, nada bastante estable aún que yo sepa (pero me gustaría amor que se demuestre que está mal).

0

No, no todos los desarrolladores usar virtualenv y/o PIP, pero muchos desarrolladores utilizan/prefieren estas herramientas

y ahora, las herramientas de desarrollo conjunto y entornos diferentes que es su verdadera cuestión. Existen otras herramientas como Buildout (http://www.buildout.org/en/latest/) para el mismo fin, aísle el sistema de construcción Python de su entorno para cada proyecto que administre. Por algún tiempo uso esto, pero ahora no.

Entornos independientes por proyecto, en Python son un poco diferentes que 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).

5

Puede usar pipenv, que tiene una interfaz similar con el paquete.

$ pip install pipenv 

Pipenv crea virtualenv e instala automáticamente las dependencias de Pipfile o 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 comandos con virtualenv alcance como bundle exec.

$ pipenv run python3 -c "print('hello!')" 
0

Escribe una - https://github.com/Deepwalker/pundler. En PIP es pundle, el nombre ya estaba tomado.

Utiliza los archivos requirements(_\w+)?.txt como sus dependencias deseadas y crea archivos frozen(_\w+)?.txt con versiones inmovilizadas.

Acerca de (_\w+)? cosa - esto es envs. Puede crear requirements_test.txt y luego usar PUNDLEENV=test para usar este deps en su ejecución con los requisitos .txt uno al lado.

Y sobre virtualenv - no necesita uno, es lo que toma de bundler en primer lugar.

0

Diría que Shovel merece la pena echarle un vistazo. 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.

Cuestiones relacionadas