¿Es posible instalar paquetes usando pip del sistema de archivos local?
He ejecutado python setup.py sdist
mi paquete, que ha creado el archivo tar.gz apropiado. Este archivo se almacena en mi sistema en /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
.
Ahora en un entorno virtual, me gustaría instalar paquetes provenientes de pypi o de la ubicación local específica /srv/pkg
.
es posible?
PD
: Sé que puedo especificar pip install /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
. Eso funcionará, pero estoy hablando de usar la /srv/pkg
ubicación como otro lugar para buscar pip si escribí pip install mypackage
.
pip install <Path-to-WHL-file>
.Respuestas:
Estoy bastante seguro de que lo que estás buscando se llama
--find-links
opción.Aunque es posible que deba generar un dummy
index.html
para su índice de paquete local que enumere los enlaces a todos los paquetes. Esta herramienta ayuda a:https://github.com/wolever/pip2pi
fuente
pip install mypackage --no-index --find-links file:///srv/pkg/mypackage
Deberia trabajar.easy_install --allow-hosts=None --find-links file:///srv/pkg/mypackage mypackage
--find-links
aún permitirá buscar en PyPI si el paquete no se encuentra en la ubicación especificada o si hay una versión más nueva disponible. En Windows, encuentro que combinar esto con--only-binary=packagename
(o--only-binary=:all:
) es extraordinariamente útil. Esto evita que pip intente descargar cualquier paquete con dependencias nativas que solo tengan distribuciones de origen en PyPI (y por lo tanto requieran compilación), que es la razón más común por la que tengo que intentar instalar desde un directorio. A diferencia--no-index
, todavía puedo instalar otros paquetes desde PyPI.Qué pasa::
p.ej,
pip install -e /srv/pkg
donde / srv / pkg es el directorio de nivel superior donde se puede encontrar 'setup.py'.
fuente
--editable
es que parece buscar en el directorio del paquete local y establecer la fuente como un repositorio git si hay uno, un poco más flexible que solo una carpeta. Sin embargo, no puedo encontrar documentación para esto.do pip install -e
comprueba el código desde el control remoto de git, me gustaría instalar el código tal como está (con cambios aún no en el control remoto).Estoy instalando
pyfuzzy
pero no está en PyPI; devuelve el mensaje:No matching distribution found for pyfuzzy
.Probé la respuesta aceptada
Pero tampoco funciona y devuelve el siguiente error:
Por fin, he encontrado una buena manera simple allí: https://pip.pypa.io/en/latest/reference/pip_install.html
Entonces el siguiente comando funcionó para mí:
Espero que te ayude.
fuente
Could not find a version that satisfies
error. Gracias.Esta es la solución que terminé usando:
Reuní esto a partir de ejemplos de instalación de pip , así como de la respuesta de Rikard en otra pregunta . El argumento "--pre" le permite instalar versiones que no son de producción. El argumento "--no-index" evita buscar en los índices PyPI. El "--find-links =". Las búsquedas de argumentos en la carpeta local (esto puede ser relativo o absoluto). Usé los argumentos "--log-file", "log.txt" y "-vv" para la depuración. El argumento "--upgrade" le permite instalar versiones más nuevas sobre las anteriores.
También encontré una buena manera de desinstalarlos. Esto es útil cuando tiene varios entornos Python diferentes. Es el mismo formato básico, simplemente usando "desinstalar" en lugar de "instalar", con una medida de seguridad para evitar desinstalaciones no deseadas:
La carpeta local contiene estos archivos: install.py, uninstall.py, mypackagename-1.0.zip
fuente
¡Una opción --find-links hace el trabajo y funciona desde el
requirements.txt
archivo!Puede colocar archivos de paquetes en alguna carpeta y tomar el último sin cambiar el archivo de requisitos, por ejemplo
requirements
:Ahora en el
requirements/base.txt
puesto:Una forma ordenada de actualizar paquetes propietarios, simplemente suelte uno nuevo en la carpeta
De esta manera, puede instalar paquetes desde
local folder
ANDpypi
con la misma llamada única:pip install -r requirements/production.txt
PD. Consulte mi bifurcación cookiecutter-djangopackage para ver cómo dividir los requisitos y usar la organización de requisitos basada en carpetas.
fuente
Desde la página de paquetes de instalación, simplemente puede ejecutar:
donde / srv / pkg / mypackage es el directorio que contiene setup.py .
Además 1 , puede instalarlo desde el archivo comprimido:
1 Aunque se señaló en la pregunta, debido a su popularidad, también se incluye.
fuente
Suponiendo que tiene virtualenv y un
requirements.txt
archivo, puede definir dentro de este archivo dónde obtener los paquetes:fuente
Tener requisitos en
requirements.txt
yegg_dir
como directoriopuedes construir tu caché local:
$ pip download -r requirements.txt -d eggs_dir
entonces, usar ese "caché" es simple como:
$ pip install -r requirements.txt --find-links=eggs_dir
fuente
Para instalar solo desde local necesita 2 opciones:
--find-links
: dónde buscar dependencias. No es necesario elfile://
prefijo mencionado por otros.--no-index
: no busque en los índices pypi las dependencias faltantes (dependencias no instaladas y no en la--find-links
ruta).Para que pueda ejecutar desde cualquier carpeta lo siguiente:
Si su mypackage está configurado correctamente, enumerará todas sus dependencias, y si utilizó la descarga de pip para descargar la cascada de dependencias (es decir, dependencias de dependencias, etc.), todo funcionará.
Si desea utilizar el índice de pipi si es accesible, pero si no utiliza las ruedas locales, puede eliminarlo
--no-index
y agregarlo--retries 0
. Verá la pausa de pip por un momento mientras intenta verificar que pypi no tenga una dependencia (una no instalada) y cuando encuentre que no puede alcanzarla, volverá a ser local. No parece haber una manera de decirle a pip que "busque primero los locales, luego el índice".fuente
He estado tratando de lograr algo realmente simple y fallé miserablemente, probablemente soy estúpido.
De todos modos, si tiene un script /
Dockerfile
que descarga un archivo zip del paquete de Python (por ejemplo, desde GitHub) y luego desea instalarlo, puede usar elfile:///
prefijo para instalarlo como se muestra en el siguiente ejemplo :NOTA : Sé que puede instalar el paquete de inmediato utilizando,
pip install https://example.com/mypackage.zip
pero en mi caso quería verificar la suma de comprobación (nunca lo suficientemente paranoico) y fallé miserablemente al tratar de usar las diversas opciones que proporciona pip / el#md5
fragmento.Ha sido sorprendentemente frustrante hacer algo tan simple directamente con
pip
. Solo quería pasar una suma de verificación ypip
verificar que el zip coincidía antes de instalarlo.Probablemente estaba haciendo algo muy estúpido, pero al final me di por vencido y opté por esto. Espero que ayude a otros a intentar hacer algo similar.
fuente