Python setup.py develop vs install

336

Deux options dans setup.py developet installme déroutent . Selon ce site , l'utilisation developcrée un lien spécial vers le répertoire site-packages.

Les gens ont suggéré que j'utilise python setup.py installpour une nouvelle installation et python setup.py developaprès que des modifications aient été apportées au fichier d'installation.

Quelqu'un peut-il faire la lumière sur l'utilisation de ces commandes?

Netro
la source

Réponses:

468

python setup.py install est utilisé pour installer des packages (généralement tiers) que vous n'allez pas développer / modifier / déboguer vous-même.

Pour vos propres affaires, vous souhaitez d'abord installer votre package, puis être capable de modifier fréquemment le code sans avoir à réinstaller le package à chaque fois - et c'est exactement ce qui python setup.py developfait: il installe le package (généralement juste un dossier source) d'une manière qui vous permet de modifier facilement votre code après son installation dans l'environnement (virtuel) et de faire en sorte que les modifications prennent effet immédiatement.

Notez qu'il est fortement recommandé d'utiliser pip install .(installer) et pip install -e .(installer par le développeur) pour installer les packages, car l'invocation setup.pydirecte fera le mauvais choix pour de nombreuses dépendances, telles que les versions préliminaires et les versions de packages incompatibles, ou rendra le package difficile à désinstaller pip.

Erik Kaplun
la source
81
Erik a raison. Il est également utile de savoir qu'il est setup.py developlivré avec une --uninstalloption pour quand vous avez fini de pirater.
philadams
5
La dernière pensée ici est qu'une autre option pour setup.py developpirater un package python est d'utiliser "une modification de chemin simple (mais explicite) pour résoudre correctement le package"
concernant
4
J'ai rencontré des problèmes en python setup.py developessayant de configurer Ceilometer pour le développement local. J'ai fini par utiliser pip install -e PATH(dans un virtualenv) afin d'éviter les problèmes qui surgissaient viaeasy_install .
Joe D'Andrea
1
Je ne sais pas si cela importe, mais si j'utilise python 3, etc., faut-il exécuter python setup.py developdifféremment?
Charlie Parker
1
Cela fonctionne avec python3, mais n'oubliez pas de supprimer toute installation actuelle de pip que vous pourriez avoir, car ils se heurteront (cela m'est arrivé pour le moment).
Léo Germond
124

De la documentation . Le developn'installera pas le package mais il créera un .egg-linkdans le répertoire de déploiement vers le répertoire du code source du projet.

C'est donc comme installer, mais au lieu de copier dans le, site-packagesil ajoute un lien symbolique (le .egg-linkfait office de lien symbolique multiplateforme).

De cette façon, vous pouvez modifier le code source et voir les modifications directement sans avoir à réinstaller chaque fois que vous apportez une petite modification. Ceci est utile lorsque vous êtes le développeur de ce projet, d'où le nom develop. Si vous installez simplement le package de quelqu'un d'autre, vous devez utiliserinstall

RubenLaguna
la source
24

Une autre chose que les gens peuvent trouver utile lors de l'utilisation de la developméthode est l' --useroption d'installation sans sudo. Ex:

python setup.py develop --user

au lieu de

sudo python setup.py develop
Taylor
la source
11
IIUC vous ne devriez jamais setup.py developdans votre système, cela n'a de sens que dans un virtualenv.
dividebyzero
2
@dividebyzero Voulez-vous dire qu'il faut toujours utiliser python setup.py develop --user, si je comprends bien? De plus, pourriez-vous me dire où le paquet est installé en utilisant python setup.py develop --user? Merci!
ROBOT AI
2
Je pense que l' --userinstallera dans un répertoire de votre compte personnel et n'affectera pas les autres utilisateurs de votre système. Le developfera des liens vers le répertoire source de votre projet au lieu de tout copier. develop --userdevrait être OK, et developdans un virtualenv aussi. Seul develople système réel est étrange, car d'autres utilisateurs peuvent utiliser quelque chose qui pointe vers le projet dans votre copie personnelle du code source du projet.
dividebyzero
4
Beaucoup (la plupart?) De personnes ne tournent pas sur des systèmes multi-utilisateurs
patstew
1
@boatcoder, Mac et Linux (et Windows) peuvent être multi-utilisateurs capables systèmes, mais très probablement le développeur est le seul (réel) compte utilisateur de son bureau, et je crois que ce que pastew voulait dire.
MestreLion