tutorial - requirements.txt python example
Cómo declarar en Requirements.txt una fuente de github directa (5)
Desde pip v1.5
, (publicado el 1 de enero de 2014: CHANGELOG , PR ), también puede especificar un subdirectorio de un repositorio git para contener su módulo. La sintaxis se ve así:
pip install -e git+https://git.repo/some_repo.git#egg=my_subdir_pkg&subdirectory=my_subdir_pkg # install a python package from a repo subdirectory
Nota: como autor de un módulo PIP, lo ideal es que desees publicar tu módulo en su propio repositorio de nivel superior, si puedes. Sin embargo, esta característica es útil para algunos repositorios preexistentes que contienen módulos de Python en subdirectorios. Puede verse obligado a instalarlos de esta manera si no se publican en pypi también.
He instalado una biblioteca usando el comando
pip install git+git://github.com/mozilla/elasticutils.git
que lo instala directamente desde un repositorio Github. Esto funciona bien y quiero tener esa dependencia en mis requirements.txt
. He visto otras entradas como this pero eso no resolvió mi problema. Si pongo algo como
-f git+git://github.com/mozilla/elasticutils.git
elasticutils==0.7.dev
en el archivo pip install -r requirements.txt
, un pip install -r requirements.txt
da como resultado el siguiente resultado:
Downloading/unpacking elasticutils==0.7.dev (from -r requirements.txt (line 20))
Could not find a version that satisfies the requirement elasticutils==0.7.dev (from -r requirements.txt (line 20)) (from versions: )
No distributions matching the version for elasticutils==0.7.dev (from -r requirements.txt (line 20))
La documentación del archivo de requisitos no menciona los enlaces que utilizan el especificador de protocolo git+git
, por lo que tal vez esto no sea compatible.
¿Alguien tiene una solución para mi problema?
Normalmente, el archivo Requirements.txt se vería así:
package-one==1.9.4
package-two==3.7.1
package-three==1.0.1
...
Para especificar un repositorio de Github, no necesita el package-name==
convención.
Los siguientes ejemplos actualizan el package-two
utilizando un repositorio de GitHub. El texto entre @
y #
denota los detalles del paquete.
Especifique el hash de confirmación ( 41b95ec
en el contexto de requirements.txt
actualizados.txt):
package-one==1.9.4
git+git://github.com/path/to/package-two@41b95ec#egg=package-two
package-three==1.0.1
Especifique el nombre de la rama ( master
):
git+git://github.com/path/to/package-two@master#egg=package-two
Especificar etiqueta ( 0.1
):
git+git://github.com/path/to/[email protected]#egg=package-two
Especificar lanzamiento ( 3.7.1
):
git+git://github.com/path/to/package-two@releases/tag/v3.7.1#egg=package-two
Tenga en cuenta que #egg=package-two
no es un comentario aquí, es para indicar explícitamente el nombre del paquete
Esta entrada de blog tiene más discusión sobre el tema.
Primero, instálalo con git+git
o git+https
, de cualquier forma que sepas. Ejemplo de instalación de la rama de brabeion
proyecto brabeion
:
pip install -e git+https://github.com/kronok/brabeion.git@12efe6aa06b85ae5ff725d3033e38f624e0a616f#egg=brabeion
En segundo lugar, use pip freeze > requirements.txt
para obtener lo correcto en sus requirements.txt
. En este caso, obtendrá
-e git+https://github.com/kronok/brabeion.git@12efe6aa06b85ae5ff725d3033e38f624e0a616f#egg=brabeion-master
Tercero, prueba el resultado:
pip uninstall brabeion
pip install -r requirements.txt
La sintaxis de los paquetes "editables" se puede usar en requirements.txt
para importar paquetes desde una variedad de VCS (git, hg, bzr, svn) :
-e git://github.com/mozilla/elasticutils.git#egg=elasticutils
Además, es posible señalar un compromiso particular:
-e git://github.com/mozilla/elasticutils.git@000b14389171a9f0d7d713466b32bc649b0bed8e#egg=elasticutils
requirements.txt
permite las siguientes formas de especificar una dependencia en un paquete en un repositorio git a partir de pip 7.0: 1
[-e] git+git://git.myproject.org/SomeProject#egg=SomeProject
[-e] git+https://git.myproject.org/SomeProject#egg=SomeProject
[-e] git+ssh://git.myproject.org/SomeProject#egg=SomeProject
-e [email protected]:SomeProject#egg=SomeProject
Para Github, eso significa que puede hacer (observe el -e
omitido):
git+git://github.com/mozilla/elasticutils.git#egg=elasticutils
¿Por qué la respuesta extra?
Me quedé algo confundido por la -e
en las otras respuestas, así que aquí está mi aclaración:
El indicador -e
o - --editable
significa que el paquete está instalado en <venv path>/src/SomeProject
y, por lo tanto, no está en la <venv path>/lib/pythonX.X/site-packages/SomeProject
profundamente enterrado, de lo contrario sería colocado en. 2
Documentación