¿Es posible instalar paquetes con pip desde el sistema de archivos local?
He ejecutado python setup.py sdist
para mi paquete, que ha creado el archivo tar.gz apropiado. Este archivo está almacenado en mi sistema en /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
.
Ahora, en un entorno virtual, me gustaría instalar los paquetes desde pypi o desde la ubicación local específica /srv/pkg
.
¿Es esto posible?
**NO ES POSIBLE.
Sé que puedo especificar pip install /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
. Eso funcionará, pero me refiero a usar la ubicación /srv/pkg
como otro lugar para que pip busque si escribo pip install mypackage
.
¿Qué pasa con::
pip install --help
...
-e, --editable <path/url> Install a project in editable mode (i.e. setuptools
"develop mode") from a local project path or a VCS url.
eg, pip install -e /srv/pkg
donde /srv/pkg es el directorio de nivel superior donde se encuentra 'setup.py'.
Estoy bastante seguro de que lo que buscas se llama opción --find-links
.
Aunque puede que necesites generar un index.html
ficticio para tu índice de paquetes local que liste los enlaces a todos los paquetes. Esta herramienta ayuda:
Esta es la solución que acabé utilizando:
import pip
def install(package):
# Debugging
# pip.main(["install", "--pre", "--upgrade", "--no-index",
# "--find-links=.", package, "--log-file", "log.txt", "-vv"])
pip.main(["install", "--upgrade", "--no-index", "--find-links=.", package])
if __name__ == "__main__":
install("mypackagename")
raw_input("Press Enter to Exit...\n")
Lo he reconstruido a partir de pip install examples y de Rikard's answer en otra pregunta. El argumento "--pre" le permite instalar versiones de no producción. El argumento "--no-index" evita buscar en los índices de PyPI. El argumento "--find-links=." busca en la carpeta local (puede ser relativa o absoluta). Utilicé los argumentos "--log-file", "log.txt", y "-vv" para la depuración. El argumento "--upgrade" permite instalar versiones más recientes sobre las anteriores.
También encontré una buena manera de desinstalarlas. Esto es útil cuando tienes varios entornos de Python diferentes. Es el mismo formato básico, sólo que usando "uninstall" en lugar de "install", con una medida de seguridad para evitar desinstalaciones involuntarias:
import pip
def uninstall(package):
response = raw_input("Uninstall '%s'? [y/n]:\n" % package)
if "y" in response.lower():
# Debugging
# pip.main(["uninstall", package, "-vv"])
pip.main(["uninstall", package])
pass
if __name__ == "__main__":
uninstall("mypackagename")
raw_input("Press Enter to Exit...\n")
La carpeta local contiene estos archivos: install.py, uninstall.py, mypackagename-1.0.zip