web-dev-qa-db-fra.com

Installation de packages Python à partir de dossiers du système de fichiers local sur virtualenv avec pip

Est-il possible d'installer des packages en utilisant pip depuis le système de fichiers local?

J'ai exécuté 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, 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 fonctionnera, mais je parle d'utiliser l'emplacement /srv/pkg comme autre emplacement de recherche pour pip si je saisis pip install mypackage.

241
chadgh

Je suis à peu près sûr que ce que vous recherchez s'appelle l'option --find-links.

Cependant, vous devrez peut-être générer un index.html factice pour votre index de package local, qui répertorie les liens vers tous les packages. Cet outil aide à:

https://github.com/wolever/pip2pi

101
Mikko Ohtamaa

Qu'en est-il de::

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 dans lequel vous pouvez trouver 'setup.py'.

357
drpoo

C'est très simple. La commande dont vous avez besoin est:

pip install -e <DIRECTORY>

Notez que le répertoire must contient un fichier setup.py

57
henryJack

J'installe pyfuzzybut 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 cela ne fonctionne pas non plus et renvoie l'erreur suivante:

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

Enfin, j'ai trouvé un moyen simple et efficace: 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 que ça peut t'aider.

26
Victor Choy

Voici la solution que j'ai utilisée:

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 __== "__main__":
    install("mypackagename")
    raw_input("Press Enter to Exit...\n")

J'ai reconstitué ceci à partir de exemples d'installation pip ainsi que de réponse de Rikard sur autre question . L'argument "--pre" vous permet d'installer des versions non destinées à la production. L'argument "--no-index" évite de rechercher les index PyPI. Le "--find-links =." La recherche d'arguments dans le dossier local (cela 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 versions les plus récentes par rapport aux 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 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 __== "__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

20
Devan Williams

Une option --find-links fait le travail et ça marche à partir du fichier requirements.txt

Vous pouvez placer les archives de paquets dans un dossier et utiliser le dernier en date sans modifier le fichier de configuration. 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 mis:

--find-links=requirements
foo_bar
wiz_bang>=0.8

Un moyen pratique de mettre à jour les paquets propriétaires, il suffit d’en déposer un nouveau dans le dossier

De cette façon, vous pouvez installer des packages à partir de local folder AND pypi avec le même appel unique: pip install -r requirements/production.txt

PS. Voir mon cookiecutter-djangopackage fork pour savoir comment fractionner les exigences et utiliser une organisation basée sur les dossiers.

7
Janusz Skonieczny

Avoir des exigences dans requirements.txt et Egg_dir en tant que répertoire

vous pouvez construire votre cache local:

$ pip download -r requirements.txt -d eggs_dir

puis, utiliser ce "cache" est simple comme:

$ pip install -r requirements.txt --find-links=eggs_dir

2
Sławomir Lenart

En supposant que vous avez virtualenv et un fichier requirements.txt, vous pouvez alors définir à l'intérieur de ce fichier où obtenir les packages:

# Published pypi packages 
PyJWT==1.6.4
email_validator==1.0.3
# Remote GIT repo package, this will install as Django-bootstrap-themes
git+https://github.com/marquicus/Django-bootstrap-themes#Egg=Django-bootstrap-themes
# Local GIT repo package, this will install as Django-knowledge
git+file:///soft/SANDBOX/python/Django/forks/Django-knowledge#Egg=Django-knowledge
1
marquicus

À partir de la page installation-packages , vous pouvez simplement exécuter:

pip installer/srv/pkg/mypackage

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


Aditionellement1, vous pouvez l’installer à partir du fichier archive:

pip installer ./mypackage-1.0.4.tar.gz

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

0
dim8