2012-05-23 9 views
5

Ho un programma che utilizza dateutil dall'indice del pacchetto. Mi piacerebbe avere setup.py per verificare la sua presenza e provare a farlo usando easy_install se non è lì.Come richiedere e installare un pacchetto usando python 3.x distutils?

The documentation for distutils sembra indicare che questo può essere fatto utilizzando la parola chiave requires in setup(), ma quando provo, si installa su un sistema senza dateutil senza dare un avvertimento o di installare il pacchetto richiesto.

L'unica cosa che ho trovato su google è stata this blog post about the same issue che non ha avuto alcuna risposta.

Sto usando distutils sbagliato? Devo creare sottoclasse distutils.command.install e fare il controllo/l'installazione da solo?

risposta

4

Il download automatico delle dipendenze è una funzionalità introdotta da setuptools che è un componente aggiuntivo di terze parti a distutils, in particolare, l'argomento install_requires aggiunto. Vedere lo setuptools documentation per ulteriori informazioni.

Un'altra opzione è utilizzare il file requirements.txt con pip anziché utilizzare easy_install come programma di installazione del pacchetto. pip è ora il programma di installazione consigliato; vedere lo Python Packaging User Guide per ulteriori informazioni.

Aggiornamento [2015-01]: la versione precedente di questa risposta si riferiva alla forcella distribute di setuptools. La forcella distribute è stata quindi reinserita in un nuovo progetto attivo setuptools. distribute è ora morto e non dovrebbe più essere utilizzato. setuptools e pip sono ora molto attivamente mantenuto ed il supporto Python 3.

+0

Il richiede argomentazione a distutils è inutilizzabile e inutilizzato, devi usare i file dei requisiti di pip o l'argomento install_requires di setuptools fino a quando non viene ampiamente utilizzato PEP 345 (rende ufficialmente supportato install_requires, con un nuovo nome: require-dist; distutils2 lo supporta). –

+0

NB: questo commento è diventato obsoleto; Distribuisci e setuptools si sono uniti. Setuptools ora ha pieno supporto 3.x. – Kevin

+0

@ Kevin, grazie per il promemoria; molto è cambiato da quando è stata scritta la risposta originale. Ho aggiornato la risposta per riflettere uno stato più attuale del mondo: l'unione di Distribute e setuptools, la fine dello sviluppo di distutils2, la benedizione di 'pip' come programma di installazione del pacchetto Python ufficiale e il nuovo' Python Packaging User Guide'. –

0

L'argomento install_requires in funzione di impostazione da distutils lavoro per me bene, solo se creo distributiva sdist, come: python setup.py sdist

+0

'install_requires' è ** non ** un argomento di' distutils.core.setup' è un [argomento extra in distribute - setuptools] (http://pythonhosted.org/distribute/setuptools.html#new-and- changed-setup-keywords) quindi è necessario utilizzare la versione distribuita di 'setup' come già detto in precedenza @Ned. Puoi anche guardare [questa risposta che descrive lo stato dei moduli di packaging] (http://stackoverflow.com/a/14753678/965798) in python. – marcz