Est-il possible d'installer des packages à l'aide de pip à partir du système de fichiers local?
J'ai exécuté python setup.py sdist
mon package, qui a créé le fichier tar.gz approprié. Ce fichier est stocké sur mon système à l'adresse /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
.
Maintenant, dans un environnement virtuel, j'aimerais installer des packages provenant de pypi ou de l'emplacement local spécifique /srv/pkg
.
Est-ce possible?
PS
Je sais que je peux préciser pip install /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
. Cela fonctionnera, mais je parle d'utiliser l' /srv/pkg
emplacement comme un autre endroit pour que pip recherche si j'ai tapé pip install mypackage
.
pip install <Path-to-WHL-file>
.Réponses:
Je suis sûr que ce que vous cherchez s'appelle
--find-links
option.Bien que vous ayez besoin de générer un mannequin
index.html
pour votre index de package local qui répertorie les liens vers tous les packages. Cet outil permet:https://github.com/wolever/pip2pi
la source
pip install mypackage --no-index --find-links file:///srv/pkg/mypackage
devrait marcher.easy_install --allow-hosts=None --find-links file:///srv/pkg/mypackage mypackage
--find-links
cela permettra toujours de rechercher sur PyPI si le package n'est pas trouvé à l'emplacement spécifié ou si une version plus récente est disponible. Sous Windows, je trouve que la combinaison de cela avec--only-binary=packagename
(ou--only-binary=:all:
) est extrêmement utile. Cela empêche pip d'essayer de télécharger des packages avec des dépendances natives qui n'ont que des distributions sources sur PyPI (et donc nécessitent une compilation), ce qui est la raison la plus courante pour laquelle je dois essayer d'installer à partir d'un répertoire. Contrairement à--no-index
, je peux toujours installer d' autres packages à partir de PyPI.Qu'en est-il de::
par exemple,
pip install -e /srv/pkg
où / srv / pkg est le répertoire de niveau supérieur où 'setup.py' peut être trouvé.
la source
--editable
c'est qu'il semble regarder dans le répertoire du package local et définir la source comme un dépôt git s'il en existe un - un peu plus flexible qu'un simple dossier. Je ne trouve cependant pas de documentation pour cela.do pip install -e
vérifie le code de la télécommande git, je voudrais installer le code tel quel (avec des modifications pas encore dans la télécommande).J'installe
pyfuzzy
mais n'est pas dans PyPI; il renvoie le message:No matching distribution found for pyfuzzy
.J'ai essayé la réponse acceptée
Mais cela ne fonctionne pas non plus et renvoie l'erreur suivante:
Enfin, j'ai trouvé un bon moyen simple: https://pip.pypa.io/en/latest/reference/pip_install.html
La commande suivante a donc fonctionné pour moi:
J'espère que ça peut t'aider.
la source
Could not find a version that satisfies
erreur. Merci.Voici la solution que j'ai finalement utilisée:
J'ai reconstitué cela à partir d' exemples d'installation de pip ainsi que de la réponse de Rikard sur une autre question . L'argument "--pre" vous permet d'installer des versions hors production. L'argument "--no-index" évite de rechercher les index PyPI. Le "--find-links =." recherches 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 des versions plus récentes par rapport aux anciennes.
J'ai également trouvé un bon moyen de les désinstaller. Ceci est utile lorsque vous disposez de plusieurs environnements Python différents. C'est le même format de base, en utilisant simplement "désinstaller" au lieu de "installer", avec une mesure de sécurité pour éviter les désinstallations involontaires:
Le dossier local contient ces fichiers: install.py, uninstall.py, mypackagename-1.0.zip
la source
Une option --find-links fait le travail et cela fonctionne à partir du
requirements.txt
fichier!Vous pouvez placer des archives de packages dans un dossier et prendre le dernier sans modifier le fichier d'exigences, par exemple
requirements
:Maintenant
requirements/base.txt
mis:Une façon soignée de mettre à jour les packages 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
ANDpypi
avec le même appel unique:pip install -r requirements/production.txt
PS. Voir ma fourchette cookiecutter-djangopackage pour voir comment diviser les exigences et utiliser l'organisation des exigences basée sur les dossiers.
la source
Depuis la page installation de packages, vous pouvez simplement exécuter:
où / srv / pkg / mypackage est le répertoire contenant setup.py .
De plus 1 , vous pouvez l'installer à partir du fichier d'archive:
1 Bien que mentionné dans la question, en raison de sa popularité, il est également inclus.
la source
En supposant que vous ayez virtualenv et un
requirements.txt
fichier, vous pouvez définir à l'intérieur de ce fichier où obtenir les packages:la source
Avoir des exigences dans
requirements.txt
et enegg_dir
tant que répertoirevous pouvez créer votre cache local:
$ pip download -r requirements.txt -d eggs_dir
alors, utiliser ce "cache" est simple comme:
$ pip install -r requirements.txt --find-links=eggs_dir
la source
Pour installer uniquement depuis local, vous avez besoin de 2 options:
--find-links
: où chercher les dépendances. Il n'est pas nécessaire pour lefile://
préfixe mentionné par d'autres.--no-index
: ne cherchez pas dans les index pypi les dépendances manquantes (dépendances non installées et pas dans le--find-links
chemin).Vous pouvez donc exécuter à partir de n'importe quel dossier les éléments suivants:
Si votre mypackage est correctement configuré, il répertoriera toutes ses dépendances, et si vous avez utilisé pip download pour télécharger la cascade de dépendances (c'est-à-dire les dépendances des dépendances, etc.), tout fonctionnera.
Si vous souhaitez utiliser l'index pypi s'il est accessible, mais que vous pouvez utiliser les roues locales sinon, vous pouvez supprimer
--no-index
et ajouter--retries 0
. Vous verrez pip s'arrêter un peu pendant qu'il essaie de vérifier pypi pour une dépendance manquante (une non installée) et quand il trouve qu'il ne peut pas l'atteindre, retombera en local. Il ne semble pas y avoir de moyen de dire à pip de "chercher d'abord les locaux, puis l'index".la source
J'ai essayé de réaliser quelque chose de vraiment simple et j'ai échoué lamentablement, je suis probablement stupide.
Quoi qu'il en soit, si vous avez un script /
Dockerfile
qui télécharge un fichier zip de package python (par exemple à partir de GitHub) et que vous souhaitez ensuite l'installer, vous pouvez utiliser lefile:///
préfixe pour l'installer comme indiqué dans l' exemple suivant :REMARQUE : je sais que vous pouvez installer le package immédiatement en utilisant
pip install https://example.com/mypackage.zip
mais dans mon cas, je voulais vérifier la somme de contrôle (jamais assez paranoïaque) et j'ai échoué lamentablement en essayant d'utiliser les différentes options fournies par pip / le#md5
fragment.Il a été étonnamment frustrant de faire quelque chose d'aussi simple directement avec
pip
. Je voulais juste passer une somme de contrôle et avoirpip
vérifié que le zip correspondait avant de l' installer.Je faisais probablement quelque chose de très stupide mais à la fin j'ai abandonné et j'ai opté pour ça. J'espère que cela aide les autres à essayer de faire quelque chose de similaire.
la source