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 .

216
demandé sur alex 2013-02-22 23:21:34

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 à:

https://github.com/wolever/pip2pi

94
répondu Mikko Ohtamaa 2015-01-31 00:42:03

::

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é.

330
répondu drpoo 2013-11-18 09:10:41

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

49
répondu henryJack 2018-01-09 09:30:29

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.

20
répondu Victor Choy 2018-03-29 14:20:33

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

19
répondu Devan Williams 2017-05-23 11:33:24

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.

5
répondu Janusz Skonieczny 2018-03-29 14:32:21