2014-09-09 20 views
6

L'installazione di numpy + pandas tramite setuptools come dipendenza in setup.py non funziona per me. Non si tratta di mancanza di dipendenza. Se installo numpy tramite pip install numpy e successivamente python setup.py develop, tutto funziona correttamente. Se ho capito bene la documentazione setuptools, tutti i pacchetti vengono prima compilati e poi installati. Quindi, numpy è stato creato, ma non installato quando pandas è stato creato.Installa numpy + pda come dipendenza in setup.py

Come soluzione alternativa ho aggiunto numpy al mio setup_requires. Funziona bene, ma ovviamente non è una soluzione molto pulita.

Qualcuno conosce una soluzione pulita (Linux va bene) per l'installazione di numpy + panda tramite setuptools?

Aggiornamento:

La dipendenza si configura tramite

install_requires=['numpy','pandas'] 

Non fa la differenza, se aggiungo NumPy esplicitamente o semplicemente aggiungere panda. In entrambi i casi numpy verrà scaricato e compilato, ma pandas non riesce a essere compilato perché alcune intestazioni (che probabilmente vengono installate durante il passo di installazione di numpy, ma non durante la creazione) non possono essere trovate. Se installo Numpy prima, tutto funziona correttamente. Posso riprodurlo al 100% e indipendentemente dal progetto su cui sto lavorando.

Aggiornamento 2:

Questa è la fine della traccia dello stack:

File "/tmp/easy_install-QMa4ce/pandas-0.14.1/temp/easy_install-f6lreI/numpy-1.9.0/numpy/distutils/command/build_src.py", line 153, in run 
    File "/tmp/easy_install-QMa4ce/pandas-0.14.1/temp/easy_install-f6lreI/numpy-1.9.0/numpy/distutils/command/build_src.py", line 170, in build_sources 
    File "/tmp/easy_install-QMa4ce/pandas-0.14.1/temp/easy_install-f6lreI/numpy-1.9.0/numpy/distutils/command/build_src.py", line 329, in build_extension_sources 
    File "/tmp/easy_install-QMa4ce/pandas-0.14.1/temp/easy_install-f6lreI/numpy-1.9.0/numpy/distutils/command/build_src.py", line 386, in generate_sources 
    File "numpy/core/setup.py", line 432, in generate_config_h 

    File "numpy/core/setup.py", line 42, in check_types 
    entry_points={ 
    File "numpy/core/setup.py", line 293, in check_types 

SystemError: Cannot compile 'Python.h'. Perhaps you need to install python-dev|python-devel. 

Il messaggio alla fine è definitivamente sbagliato. Se eseguo il pip install numpy prima di eseguire python setup.py develop, tutto funziona correttamente. Nell'esempio sopra, avevo solo pandas in install_requires e non numpy. Ma per quanto ho potuto capire, non fa differenza se numpy viene aggiunto esplicitamente o meno.

+0

come stai dichiarandolo come un bancomat di dipendenza? (il modo in cui non funziona.) –

risposta

5

Fare riferimento al numero aperto https://github.com/numpy/numpy/issues/2434.

Questo è un bug noto in numpy in relazione a setuptools.

Come discusso qui, utilizzare $ pip install -e . anziché $ python setup.py develop - stesso risultato, ma evita questo problema.

3

Questi devono essere dichiarati con il kwarg install_requires di installazione. Ecco an example project, geopandas, which requires pandas:

setup(name='geopandas', 
     version=FULLVERSION, 
     description='Geographic pandas extensions', 
     license='BSD', 
     author='Kelsey Jordahl', 
     author_email='[email protected]', 
     url='http://geopandas.org', 
     long_description=LONG_DESCRIPTION, 
     packages=['geopandas', 'geopandas.io', 'geopandas.tools'], 
     install_requires=[ 
     'pandas', 'shapely', 'fiona', 'descartes', 'pyproj', 'rtree'], # here 
) 

È inoltre possibile specificare le versioni necessarie, vedere setuptools docs, come spesso si vuole garantire la versione è recente (ha le caratteristiche/bug-fix si basano su) - ecco how I do that in pep8radius.

+0

Vedere il mio aggiornamento sopra. L'aggiunta di panda come hai fatto, non funziona per me se numpy non è installato prima di chiamare 'python setup.py develop'. – Achim

+0

@Achim è questo il caso in cui numpy è * non * in install_requires? –

+0

Ho aggiunto un secondo aggiornamento. – Achim