Est-il possible d'installer des paquets avec pip à partir du système de fichiers local ?
J'ai lancé python setup.py sdist
pour mon paquet, qui a créé le fichier tar.gz approprié. Ce fichier est stocké sur mon système sous /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
.
Maintenant, dans un environnement virtuel, je voudrais installer des paquets provenant soit de pypi, soit de l'emplacement local spécifique /srv/pkg
.
Est-ce possible ?
PS
Je sais que je peux spécifier pip install /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
. Cela fonctionnera, mais je parle d'utiliser l'emplacement /srv/pkg
comme un autre endroit où pip chercherait si je tapais pip install mypackage
.
Qu'en est-il: :
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.
par exemple, pip install -e /srv/pkg
où /srv/pkg est le répertoire de premier niveau où se trouve le fichier 'setup.py' ;.
Je suis presque sûr que ce que vous cherchez s'appelle l'option "---find-links".
Cependant, vous pourriez avoir besoin de générer un faux index.html
pour votre index local de paquets qui liste les liens vers tous les paquets. Cet outil peut vous aider :
C'est la solution que j'ai fini par utiliser :
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")
Je me suis inspiré de [pip install examples][1] ainsi que de la réponse de Rikard à [une autre question][3]. L'argument "--pre" ; vous permet d'installer des versions de non-production. L'argument "--no-index" ; évite de chercher dans les index PyPI. L'argument "--find-links=." ; recherche dans le dossier local (qui peut être relatif ou absolu). J'ai utilisé les arguments "--log-file" ;, "log.txt" ;, et "-vv" ; pour le débogage. L'argument "--upgrade" ; vous permet d'installer les nouvelles versions sur les anciennes.
J'ai aussi trouvé un bon moyen de les désinstaller. Ceci est utile lorsque vous avez plusieurs environnements Python différents. C’est le même format de base, en utilisant simplement "uninstall" ; au lieu de "install" ;, avec une mesure de sécurité pour éviter les désinstallations involontaires :
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")
Le dossier local contient les fichiers suivants : install.py, uninstall.py, mypackagename-1.0.zip
[1] : http://pip.readthedocs.org/en/latest/reference/pip_install.html#pip-install-examples
[3] : https://stackoverflow.com/questions/12332975/installing-python-module-within-code