2011-11-28 10 views
68

Qualcuno incontrare questo avviso quando si esegue python setup.py install di un pacchetto PyPI?PyPI UserWarning: opzione di distribuzione sconosciuto: '' install_requires

install_requires definisce ciò richiede il pacchetto. Molti pacchetti PyPI hanno questa opzione. Come può essere una "opzione di distribuzione sconosciuta"?

+0

Possibile duplicato di [Aggiunta di 'install \ _requires' a setup.py quando si crea un pacchetto python] (https://stackoverflow.com/questions/9810603/adding-install-requires-to-setup- py-when-making-a-python-package) forse – tripleee

+0

@ tripleee, ma questa domanda è stata fatta prima di quella. –

+0

[L'età delle domande è una preoccupazione secondaria] (https://meta.stackoverflow.com/questions/251938/should-i-flag-a-question-as-duplicate-if-it-has-received-better-answers) ma non ho una forte opinione in entrambi i casi. Se desideri che la designazione duplicata vada al contrario, potresti creare una [meta] domanda per la visibilità. Per me personalmente, la risposta accettata dall'altra domanda mi ha aiutato di più, perché è più diretta e focalizzata. Sembra che tu non abbia mai accettato nessuna di queste risposte, quindi questo è un fattore che potresti effettivamente cambiare. – tripleee

risposta

8

Questo è un avvertimento da Distutils, ed è un segno che non si dispone di setuptools installati. L'installazione da http://pypi.python.org/pypi/setuptools rimuoverà l'avviso.

+26

setuptools è installato. ha ancora l'avvertimento. –

+0

Hai perfettamente ragione, ottengo questo errore in Python 2.6.6 anche se setuptools o distribuito è installato. Se provo con 2.7.2 è andato comunque. –

+3

Sto riscontrando questo problema in python 2.7.3 –

14

ATTENZIONE! ATTENZIONE! Risposta imperfetta avanti. Per ottenere l'ultimo memo sullo stato del packaging nell'universo Python, leggi this fairly detailed essay.

Ho appena incontrato questo problema quando si cerca di costruire/installare ansible. Il problema sembra essere che distutils davvero doesn't support install_requires. Setuptools should distutils di patch-scimmia al volo, ma non è così, probabilmente perché l'ultima versione di setuptools è 0.6c11 del 2009, mentre distutils è un progetto core di Python.

Quindi, anche dopo aver installato manualmente setuptools-0.6c11-py2.7.egg con setup.py, si prelevano solo distutils dist.py e non quello da site-packages/setuptools /.

anche la documentazione setuptools suggerimenti per utilizzare ez_setup e non distutils.

Tuttavia, setuptools è di per sé fornito da distribute al giorno d'oggi, e l'aroma di setup() supporta install_requires.

+1

Downvoted, in quanto questa risposta contiene un po 'di disinformazione e confusione su cosa sono le cose diverse. ez_setup.py, ad esempio, è un programma di installazione bootstrap per setuptools e non è qualcosa che userebbe "invece di" distutils. La maggior parte dei pacchetti PyPI non sono "semplicemente sbagliati". – Iguananaut

+1

@Iguananaut, grazie per aver esaminato la risposta; L'ho modificato – PAStheLoD

+0

Oh forte, grazie. In tal caso mi riproverò di nuovo :) Il saggio di Nick Coghlan a cui ti sei collegato è quello che ho condiviso con i miei colleghi prima di provare a farli girare intorno a questa roba. – Iguananaut

60

python setup.py utilizza distutils che non supporta install_requires. setuptools lo fa, distribuisce anche (il suo successore), e pip (che usa entrambi) lo fa. Ma in realtà devi usarli. Cioè chiamare setuptools tramite il comando easy_install o pip install.

Un altro modo è di importare l'installazione da setuptools nel setup.py, ma questo non è standard e fa sì che tutti coloro che vogliono utilizzare il pacchetto debbano avere setuptools installato.

+3

Dire che voglio usare 'pip', come faccio a lanciare il file' setup.py' se voglio solo creare un'estensione sul posto? –

+8

L'avviso non impedisce di impacchettare il codice, quindi è possibile eseguire 'python setup.py sdist' e installarlo con' pip install result_package.tar.gz'. Puoi anche usare 'pip install -e' per installare direttamente dal sorgente, ma ho sempre preferito installare direttamente dal pacchetto o dal repository .. –

+0

Questo è un po 'incasinato. Puoi sempre provare a importare la configurazione da setuptools prima, altrimenti vai con le distutils e ricevi l'avviso. Se è in pypy, tuttavia, si potrebbe finire con "Troppi file aperti" a causa di setuptools che non chiudono correttamente i descrittori (anche su Debian, con l'ulimit predefinito di 1024): https://bugs.pypy.org/ issue878 – fiorix

2

Per quanto posso dire, questo è un bug in setuptools dove non sta rimuovendo i setuptools opzioni specifiche prima di chiamare fino alla classe di base nella libreria standard: https://bitbucket.org/pypa/setuptools/issue/29/avoid-userwarnings-emitted-when-calling

Se si dispone di un incondizionato import setuptools nel proprio setup.py (come si dovrebbe se si utilizzano le opzioni specifiche di setuptools), quindi il fatto che lo script non abbia esito negativo con ImportError indica che setuptools è installato correttamente.

È possibile disattivare l'avviso come segue:

python -W ignore::UserWarning:distutils.dist setup.py <any-other-args> 

Solo fare questo se si utilizza l'importazione incondizionato che non riuscirà del tutto se non è installato setuptools :)

(io sono vedendo questo stesso comportamento in un checkout dal repository post-fusione di setuptools, è per questo che sono sicuro che sia un bug setuptools piuttosto che un problema di configurazione del sistema.Mi aspetto che la distribuzione pre-merge abbia lo stesso problema)

1
sudo apt-get install python-dev # for python2.x installs 
sudo apt-get install python3-dev # for python3.x installs 

Installa eventuali intestazioni mancanti. Ho risolto il mio problema

Problemi correlati