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
.
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 à:
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'.
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
J'installe pyfuzzy
but 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.
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
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.
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
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
À partir de la page installation-packages , vous pouvez simplement exécuter:
pip installer/srv/pkg/mypackage
où /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.