Installer des paquets Python à partir du dossier du système de fichiers local vers virtualenv avec pip
est-il possible d'installer des paquets en utilisant pip à partir du système de fichiers local?
j'ai couru python setup.py sdist
pour mon colis, qui a créé le approprié de goudron.fichier gz. Ce fichier est stocké sur mon système à /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
.
maintenant dans un environnement virtuel, j'aimerais installer des paquets provenant de pypi ou 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 va marcher, mais je parle de l'utilisation de l'emplacement /srv/pkg
comme un autre endroit pour pip à la recherche Si j'ai tapé pip install mypackage
.
6 réponses
je suis assez sûr que ce que vous recherchez s'appelle --find-links
option.
bien que vous pourriez avoir besoin de générer un dummy index.html
pour votre index de paquets local qui liste les liens vers tous les paquets. Cet outil vous aide à:
::
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 niveau supérieur où "setup.py" peut être trouvé.
C'est très simple. La commande dont vous avez besoin est:
pip install -e <DIRECTORY>
notez que le répertoire doit avoir un setup.py
fichier dedans
j'installe pyfuzzy
mais is n'est pas dans PyPI; il renvoie le message: No matching distribution found for pyfuzzy
.
j'ai essayé la réponse acceptée
pip install --no-index --find-links=file:///Users/victor/Downloads/pyfuzzy-0.1.0 pyfuzzy
Mais il ne fonctionne pas et renvoie l'erreur suivante:
en Ignorant les indices: https://pypi.python.org/simple Collecte de pyfuzzy Ne pouvait pas trouver une version qui répond à l'exigence pyfuzzy (à partir de versions: ) Aucun répartition correspondante trouvée pour pyfuzzy
enfin, j'y ai trouvé un simple bon chemin: https://pip.pypa.io/en/latest/reference/pip_install.html
Install a particular source archive file.
$ pip install ./downloads/SomePackage-1.0.4.tar.gz
$ pip install http://my.package.repo/SomePackage-1.0.4.zip
donc la commande suivante a fonctionné pour moi:
pip install ../pyfuzzy-0.1.0.tar.gz.
J'espère qu'il pourra 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")
j'ai assemblé cela de exemples d'installation de pip ainsi que de réponse de Rikard sur une autre question . L'argument "--pre " vous permet d'installer des versions non productives. L'argument" --no-index " évite la recherche dans les index PyPI. "- Trouver-des liens=."recherche d'arguments dans le dossier local (cela peut être relatif ou absolu). J'ai utilisé le "--log-fichier", "ouvrir une session.arguments TXT", et "-vv" pour le débogage. L'argument "-- upgrade " vous permet d'installer des versions plus récentes que des versions plus anciennes.
j'ai aussi trouvé un bon moyen de les désinstaller. Ceci est utile lorsque vous avez plusieurs différents environnements Python. C'est le même format de base, il suffit d'utiliser "Désinstaller" au lieu de "installer", avec une mesure de sécurité pour empêcher 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 ces fichiers: install.py, uninstall.py, monpaquet-1.0.zip
Une option - trouver-des liens fait le travail et il fonctionne à partir de requirements.txt
fichier!
vous pouvez placer des archives de paquets dans un dossier et prendre le dernier sans changer le fichier d'exigences, par exemple requirements
:
.
└───requirements.txt
└───requirements
├───foo_bar-0.1.5-py2.py3-none-any.whl
├───foo_bar-0.1.6-py2.py3-none-any.whl
├───wiz_bang-0.7-py2.py3-none-any.whl
├───wiz_bang-0.8-py2.py3-none-any.whl
├───base.txt
├───local.txt
└───production.txt
maintenant dans requirements/base.txt
put:
--find-links=requirements
foo_bar
wiz_bang>=0.8
une façon soignée de mettre à jour les paquets propriétaires, il suffit d'en déposer un nouveau dans le dossier
In de cette façon, vous pouvez installer les paquets de local folder
et pypi
avec le même simple appel: pip install -r requirements/production.txt
PS. Voir mon cookiecutter-djangopackage fourche pour voir comment partager les exigences et utiliser l'organisation des exigences basées sur les dossiers.