Equivalente en Python de npm o rubygems
He estado buscando un gestor de paquetes que se pueda usar con python. Quiero listar las dependencias del proyecto en un archivo. Por ejemplo ruby usa Gemfile donde puedes usar bundle install. ¿Cómo puedo lograr esto en python?
4 answers
La herramienta pip
se está convirtiendo en el estándar equivalente a las gemas de Ruby. Like distribute
, pip
utiliza el repositorio de paquetes PyPI (por defecto) para resolver y descargar dependencias. pip
puede instalar dependencias desde un archivo que enumere las dependencias del proyecto (llamadas requirements.txt
por convención):
pip install -r requirements.txt
También puede "congelar" los paquetes actuales en la ruta de Python usando pip:
pip freeze > requirements.txt
Cuando se utiliza en combinación con el paquete virtualenv
, puede crear un proyecto de forma fiable Entornos Python con las dependencias requeridas de un proyecto.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-16 21:24:18
Pipenv
(Sé que es una vieja pregunta, y ya tiene una respuesta, pero para cualquiera que venga aquí buscando una respuesta diferente como yo.)
He encontrado un muy buen equivalente para npm, se llama pipenv. Maneja ambos requisitos virtualenv y pip al mismo tiempo por lo que es más como npm.
Caso de Uso simple
pip install pipenv
Entonces puede hacer un nuevo virtualenv con la tercera versión de python, así como hacer un pipfile que se llenará con los requisitos de sus proyectos y otras cosas:
pipenv install --three
Usando su virtualenv creado:
pipenv shell
Instalando un nuevo paquete python:
pipenv install requests
Ejecutar su archivo. py es como:
pipenv run python somefile.py
Puedes encontrar su doc aquí.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-09 08:08:49
Python usa pip
para un gestor de paquetes. El comando pip install
tiene una opción -r <file>
para instalar paquetes desde el archivo de requisitos especificado.
Comando de instalación:
pip install -r requirements.txt
Ejemplo requirements.txt
contenido:
Foo >= 1.2
PickyThing <1.6,>1.9,!=1.9.6,<2.0a0,==2.4c1
SomethingWhoseVersionIDontCareAbout
Consulte la sección Requisitos de análisis de los documentos para obtener una descripción completa del formato: https://pip.pypa.io/en/stable/user_guide/#requirements-files
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-12 11:24:44
Así es como restrinjo el alcance de pip
al proyecto actual. Se siente como lo contrario si vienes de NodeJS npm
o PHP composer
donde especificas explícitamente instalaciones globales con -g
o --global
.
Si aún no tiene virtualenv
instalado, instálelo globalmente con:
pip install virtualenv
Cada proyecto Python debe tener su propia instalación virtualenv
. Es fácil configurar uno, solo cd
a la raíz de tu proyecto y:
python3 -m virtualenv env # creates env folder with everything you need
Activar virtualenv:
source env/bin/activate
Ahora, cualquier interacción con pip
está contenida dentro de su proyecto.
Ejecuta pip install package_name==version
para cada una de tus dependencias. Están instalados en ./env/lib/python3.x/site-packages/
Cuando desee guardar las dependencias de su proyecto en un archivo, ejecute:
pip freeze > requirements.txt
En realidad no necesitas -l
o --local
si estás en un virtualenv específico del proyecto activado (que deberías estar).
Ahora, cuando quieras instalar tus dependencias desde requirements.txt
, configura tu virtualenv, y corre:
pip install -r requirements.txt
Eso es todo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-09 04:08:37