Python setup.py sviluppa vs installa


336

Due opzioni in setup.py develope installmi stanno confondendo. Secondo questo sito , l'utilizzo developcrea un collegamento speciale alla directory dei pacchetti del sito.

Le persone mi hanno suggerito di utilizzare python setup.py installper una nuova installazione e python setup.py developdopo aver apportato modifiche al file di installazione.

Qualcuno può fare luce sull'uso di questi comandi?

Risposte:


468

python setup.py install è usato per installare pacchetti (in genere di terze parti) che non hai intenzione di sviluppare / modificare / eseguire il debug.

Per la tua roba, vuoi prima installare il tuo pacchetto e poi essere in grado di modificare frequentemente il codice senza dover reinstallare il pacchetto ogni volta - e questo è esattamente ciò che python setup.py developfa: installa il pacchetto (in genere solo una cartella di origine) in un modo che ti consente di modificare comodamente il tuo codice dopo che è stato installato nell'ambiente (virtuale) e che le modifiche abbiano effetto immediato.

Si consiglia vivamente di utilizzare pip install .(installa) e pip install -e .(installazione sviluppatore) per installare i pacchetti, poiché invocare setup.pydirettamente farà le cose sbagliate per molte dipendenze, come le versioni preliminari pull e le versioni incompatibili del pacchetto, o rendere difficile la disinstallazione del pacchetto pip.


81
Erik ha ragione. Utile anche sapere che setup.py developviene fornito con --uninstallun'opzione per quando hai finito di hackerare.
philadams,

5
L'ultimo pensiero qui è che un'altra opzione per l' setup.py develophacking su un pacchetto Python è quella di utilizzare "una modifica del percorso semplice (ma esplicita) per risolvere correttamente il pacchetto" re Kenneth Reitz
philadams

4
Ho riscontrato problemi durante il python setup.py developtentativo di impostare Ceilometer per lo sviluppo locale. Ho finito per usare pip install -e PATH(all'interno di un virtualenv) per evitare problemi che si sono verificati tramiteeasy_install .
Joe D'Andrea,

1
non sono sicuro se questo è importante, ma se sto usando Python 3 ecc., si dovrebbe eseguire python setup.py developdiversamente?
Charlie Parker,

1
Funziona con python3, ma non dimenticare di rimuovere qualsiasi installazione di pip corrente che potresti avere, poiché si scontreranno (è successo a me al momento).
Léo Germond

124

Dalla documentazione . Il developnon verrà installato il pacchetto, ma si creerà una .egg-linknella directory di nuovo schieramento alla directory di codice sorgente del progetto.

Quindi è come installarlo ma invece di copiarlo site-packagesaggiunge un collegamento simbolico ( .egg-linkagisce come un collegamento simbolico multipiattaforma).

In questo modo puoi modificare il codice sorgente e vedere le modifiche direttamente senza dover reinstallare ogni volta che apporti una piccola modifica. Questo è utile quando sei lo sviluppatore di quel progetto da cui il nome develop. Se stai semplicemente installando il pacchetto di qualcun altro dovresti usareinstall


24

Un'altra cosa che le persone potrebbero trovare utili quando si utilizza il developmetodo è l' --useropzione di installazione senza sudo. Ex:

python setup.py develop --user

invece di

sudo python setup.py develop

11
IIUC non dovresti mai setup.py developnel tuo sistema, questo ha senso solo in un virtualenv.
dividebyzero,

2
@dividebyzero Vuoi dire che si dovrebbe sempre usare python setup.py develop --user, se ho capito bene? Inoltre, potresti dirmi dove è installato il pacchetto usando python setup.py develop --user? Grazie!
ROBOT AI

2
Penso che --userverrà installato in una directory nel tuo account di casa e non influenzerà altri utenti nel tuo sistema. La developfarà link al tuo directory di origine del progetto in realtà invece di copiare tutto. develop --userdovrebbe essere OK, e anche developin virtualenv. Solo developil sistema reale è strano, perché potresti avere altri utenti che utilizzano qualcosa che punta al progetto nella tua copia personale del codice sorgente del progetto.
dividebyzero,

4
Molte (la maggior parte?) Persone non sono in esecuzione su sistemi
multiutente

1
@boatcoder, Mac e Linux (e Windows) potrebbero essere multi-utente in grado sistemi, ma molto probabilmente lo sviluppatore è l'unico (reale) account utente del suo desktop, e credo che questo è quello che pastew destinati.
MestreLion,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.