428 votes

Installation de paquets Python à partir d'un dossier du système de fichiers local vers virtualenv avec pip

Est-il possible d'installer des paquets avec pip à partir du système de fichiers local ?

J'ai couru python setup.py sdist pour mon paquet, qui a créé le fichier tar.gz approprié. Ce fichier est stocké sur mon système à /srv/pkg/mypackage/mypackage-0.1.0.tar.gz .

Maintenant, dans un environnement virtuel, je voudrais installer des paquets provenant soit de pypi, soit d'un 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 de l'utilisation de l'option /srv/pkg comme un autre endroit où pip pourrait chercher si je tapais pip install mypackage .

0 votes

Je cherchais à installer un paquet PyPi sans setup.py, à partir de la roue WHL, et il a été installé après que j'ai téléchargé une version correcte pour ma version de Python, et que j'ai couru pip install <Path-to-WHL-file> .

520voto

drpoo Points 616

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.

eg, pip install -e /srv/pkg

où /srv/pkg est le répertoire de premier niveau où se trouve 'setup.py'.

64 votes

Cela installera le paquet en mode développement, c'est-à-dire qu'il renverra simplement à l'endroit où se trouvent les sources. Si, par hasard, les sources sont déplacées ou supprimées, l'importation du paquet échouera.

4 votes

@MarcoDinacci Qu'est-ce qui est intéressant à propos de --editable est qu'il semble regarder dans le répertoire du paquet local et définir la source comme un dépôt git s'il y en a un - un peu plus flexible qu'un simple dossier. Je ne trouve pas de documentation à ce sujet.

3 votes

Bien que cela soit correct pour l'installation d'un paquet particulier, en particulier un paquet en cours de développement intensif sur une machine locale ou une url VCS. Cela ne répond pas à la question de la recherche d'un répertoire parent pour toutes les sources locales de paquets. par opposition à une source particulière de paquets . La réponse acceptée fonctionne lorsque vous avez un répertoire ou une URL avec plusieurs paquets que vous voulez installer par pip.

179voto

Mikko Ohtamaa Points 20940

Je suis presque sûr que ce que vous cherchez s'appelle --find-links option.

Vous pouvez faire

pip install mypackage --no-index --find-links file:///srv/pkg/mypackage

108 votes

pip install mypackage --no-index --find-links file:///srv/pkg/mypackage devrait fonctionner.

1 votes

Ça aide. Et nous pouvons utiliser -i de pip pour le traiter comme un PyPI local.

0 votes

La commande easy_install équivalente est easy_install --allow-hosts=None --find-links file:///srv/pkg/mypackage mypackage

52voto

user3762471 Points 1

J'installe pyfuzzy mais il n'est pas dans PyPI ; il retourne 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 cela ne fonctionne pas non plus et renvoie l'erreur suivante :

Ignorer les index : https://pypi.python.org/simple Collecte de pyfuzzy Impossible de trouver une version qui satisfait à l'exigence pyfuzzy (de versions : ) Aucune distribution correspondante trouvée pour pyfuzzy

Enfin, j'ai trouvé un moyen simple et efficace d'y parvenir : 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

La commande suivante a donc fonctionné pour moi :

pip install ../pyfuzzy-0.1.0.tar.gz.

J'espère que cela pourra vous aider.

48voto

user8 Points 2619

Desde el page d'installation des paquets vous pouvez simplement courir :

pip install /srv/pkg/mypackage

donde /srv/pkg/mypackage est le répertoire, contenant setup.py .


En outre, 1 vous pouvez l'installer à partir du fichier d'archive :

pip install ./mypackage-1.0.4.tar.gz

1 Bien que noté dans la question, en raison de sa popularité, il est également inclus.

24voto

Devan Points 319

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é ça à partir pip install examples ainsi que de La 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. 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 également 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 ces fichiers : install.py, uninstall.py, mypackagename-1.0.zip

1 votes

Merci. Les "--find-links=." et "--no-index", ont été la clé pour coller ensemble un python-script à l'intérieur de mon paquetage utilitaire, qui d'abord supprime l'ancien paquetage de la version du site, puis installe un paquetage tar.gz'ed depuis un sous-répertoire du dossier du paquetage utilitaire (je ne connaissais pas les --find-links=.), puis crée la roue et l'installe. Tout est automatisé via plumbum et click. Si quelqu'un le veut, je posterai un lien. Upvoted.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X