"Pip install --editable ./" vs "python setup.py develop"

178

Y a-t-il une différence significative entre

pip install -e /path/to/mypackage

et la variante setuptools?

python /path/to/mypackage/setup.py develop
PeterE
la source
1
Cela semble être un lien mis à jour décrivant le mode de développement: setuptools.readthedocs.io/en/latest/…
PaulR
si vous êtes intéressé par la désinstallation (packages en mode développement / modifiable), essayez cette question: stackoverflow.com/questions/17346619/...
Charlie Parker

Réponses:

131

Essayez d'éviter d'appeler setup.pydirectement, cela ne dira pas correctement à pip que vous avez installé votre paquet.

Avec pip install -e:

Pour les projets locaux, le répertoire «SomeProject.egg-info» est créé par rapport au chemin du projet. C'est un avantage par rapport à la simple utilisation setup.py develop, qui crée le "egg-info" directement par rapport au répertoire de travail actuel.

Plus: docs

Lisez également des setuptools docs .

sobolevn
la source
L'utilisateur doit-il réexécuter 'python setup.py sdist' après avoir modifié le fichier pour que la modification prenne effet?
variable du
cependant si vous avez besoin de déboguer (le fichier setup.py lui-même) avec 'set_trace' alors 'python setup.py develop' le rend possible
mirek
La deuxième URL est cassée.
bad_coder
Les deux fonctionnent pour moi.
sobolevn le
76

Une autre différence: pip install -eutilise la roue python setup.py develop
sans l'utiliser.

Avec install, vous pouvez obtenir le même comportement en utilisant
pip install -e /path/to/package --no-use-wheel

Plus d'informations sur les roues: roues en python

user2488286
la source
18
Notez que, selon pip.pypa.io/en/stable/reference/pip_install , DEPRECATED--no-use-wheel en faveur de--no-binary :all:
Nzbuu
Pouvons-nous faire pip install -e pour un paquet produit avec sdist?
variable du
36

Une autre différence qui peut favoriser pip install -eest que si votre projet a des dépendances dans install_requiresin setup.py, alors pip install -e .installe les dépendances avec pip, tandis que python setup.py developpeut installer avec easy_install, et peut causer des problèmes re: 'egg-info' comme mentionné ci-dessus. Lorsqu'il est install-requiresutilisé dependency_linksavec des URL git personnalisées, avec des identifiants d'oeuf attachés, cela peut être particulièrement ennuyeux.

ely
la source
1
cela explique totalement pourquoi mon package privé n'a pas pu être installé. c'est sur mon serveur devpi pas pypi. Merci.
ckot
Lorsque vous dites que le package devient modifiable, voulez-vous dire que l'utilisateur devra exécuter à nouveau «python setup.py sdist» après avoir modifié le fichier du package? Ou exécuter la commande ci-dessus n'est pas nécessaire?
variable du
@variable lorsque vous installez un package local avec pip install -e ., il crée essentiellement un lien symbolique dans le répertoire site-packages Python approprié pour pointer vers votre copie de travail. Lorsque des modifications de code sont apportées à cette copie de travail, elles sont instantanément reflétées dans la version "installée", vous n'avez donc pas besoin de réexécuter les commandes d'installation au fur et à mesure. Ceci est principalement utile pour développer dans un référentiel qui représente un package installable, mais peut également être pratique pour, par exemple, écrire une collection de modules avec uniquement des importations absolues, etc.
le
0

Encore une autre différence: lorsque vous exécutez python setup.py developpour une version qui est considérée comme une pré-version (peut-être parce que vous l'exécutez à partir d'un clone git sans avoir extrait de version), vous activerez l'installation des pré-versions de vos dépendances . D'autre part, avec pip install --editablevous auriez à passer --preexplicitement si vous voulez ces pré-versions.

(Consultez le journal CI avec les pré-versions utilisées accidentellement et comparez-le à une version fixe ici .)

Jan Kundrát
la source