2012-05-05 32 views
12

Voglio creare un setup.py che installare i file in directory personalizzati. Ho un certo prefisso, dove vorrei ottenere il seguente risultato:configurazione setup.py python per installare i file nelle directory personalizzati

/my/prefix/ 
    bin/ 
    script.sh 
    libexec/ 
    one.py 
    two.py 
    ... 
    lib/pythonX.Y/site-packages/ 
    package/... 

Il mio progetto iniziale è la seguente:

/ 
    script.sh 
    one.py 
    two.py 
    ... 
    setup.py 
    package/... 
    __init__.py 
    ... 

Quale sarebbe il modo migliore per raggiungere questo obiettivo? Mi piacerebbe essere in grado di installare in un secondo momento con qualcosa di simile:

python setup.py install --prefix=/my/prefix 

posso ottenere "pacchetto" ben installato nella directory corretta come lib/pythonX.Y/site-packages sotto --prefix è l'impostazione predefinita Posizione. Ma c'è un modo pulito per ottenere script.sh in "bin" e altri file python in "libexec"? L'unico modo che vedo per ottenere quello sarebbe quello di copiare manualmente quei file nel mio script setup.py. Potrebbe esserci un modo più pulito e più standard per farlo?

(edit)

Soluzione

ho finito con setup.py così:

setup(name='mylib', 
    scripts=['script.sh'], 
    data_files=[('libexec', ['one.py', 'two.py'])] 
) 

Naturalmente, si potrebbe iterare su tutti i file di python per libexec, ma io ho solo 2-3 file python di cui ho bisogno.

(edit2)

Inoltre, posso avere setup.cfg con il seguente:

[install] 
prefix=/my/prefix 

invece di python setup.py install --prefix=/my/prefix posso solo fare:

python setup.py install 
+0

Ecco alcuni documenti utili su questo qui: https://docs.python.org/2/install/index.html#alternate-installation-unix-the-prefix-scheme e qui https: //docs.python. org/3/distutils/introduction.html – Pierz

risposta

8

Gli script vengono gestiti utilizzando il parametro scripts per la funzione di configurazione. Per libexec puoi trattarli come file di dati e utilizzare le opzioni di dati.

setup(... 
    scripts=glob("bin/*"), 
    data_files=[(os.path.join(sys.prefix, 'libexec', 'mypackage'), glob("libexec/*"))], 
    ... 
) 

Non sono sicuro di come dovrebbe funzionare con un'opzione --prefix, non ho mai provato.

+0

Grazie! data_files ha fatto per me. Un'altra domanda, posso avere un "prefisso" predefinito? Se l'utente non ne specifica uno, vorrei usare il mio (al posto del default di python). – Ago

+1

È possibile effettuare le opzioni predefinite nel file setup.cfg. È in un file di opzioni in stile .ini con sezioni e coppie nome-valore. Le opzioni della riga di comando si traducono direttamente in opzioni (rimuovi '--', ecc.). – Keith

+0

funziona come un incantesimo, grazie! – Ago

Problemi correlati