Установка numpy в качестве зависимости с помощью setuptools

Это может быть дополнительный вопрос к этому.

Я использую setuptools для установки моего пакета. В качестве зависимости я указал numpy. Я использую Python2.7, и когда я это делаю

python setup.py install

с этим setup.py файлом:

from setuptools import setup

setup(name = "test_pack", install_requires = ["numpy"])

Я получаю это сообщение об ошибке:

ImportError: No module named numpy.distutils

Что мне нужно сделать, чтобы включить numpy в качестве зависимости и установить его без установки python-dev?


Полный вывод python setup.py install:

running install
running bdist_egg
running egg_info
writing requirements to test_pack.egg-info/requires.txt
writing test_pack.egg-info/PKG-INFO
writing top-level names to test_pack.egg-info/top_level.txt
writing dependency_links to test_pack.egg-info/dependency_links.txt
reading manifest file 'test_pack.egg-info/SOURCES.txt'
writing manifest file 'test_pack.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-x86_64/egg
running install_lib
creating build/bdist.linux-x86_64/egg
creating build/bdist.linux-x86_64/egg/test_pack
copying build/lib/test_pack/__init__.py -> build/bdist.linux-x86_64/egg/test_pack
copying build/lib/test_pack/mod.py -> build/bdist.linux-x86_64/egg/test_pack
byte-compiling build/bdist.linux-x86_64/egg/test_pack/__init__.py to __init__.pyc
byte-compiling build/bdist.linux-x86_64/egg/test_pack/mod.py to mod.pyc
creating build/bdist.linux-x86_64/egg/EGG-INFO
copying test_pack.egg-info/PKG-INFO -> build/bdist.linux-x86_64/egg/EGG-INFO
copying test_pack.egg-info/SOURCES.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying test_pack.egg-info/dependency_links.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying test_pack.egg-info/requires.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying test_pack.egg-info/top_level.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
creating 'dist/test_pack-0.0.0-py2.7.egg' and adding 'build/bdist.linux-x86_64/egg' to it
removing 'build/bdist.linux-x86_64/egg' (and everything under it)
Processing test_pack-0.0.0-py2.7.egg
Copying test_pack-0.0.0-py2.7.egg to /home/woltan/local/lib/python2.7/site-packages
Adding test-pack 0.0.0 to easy-install.pth file

Installed /home/woltan/local/lib/python2.7/site-packages/test_pack-0.0.0-py2.7.egg
Processing dependencies for test-pack==0.0.0
Searching for numpy
Reading http://pypi.python.org/simple/numpy/
Reading http://numpy.scipy.org
Reading http://sourceforge.net/project/showfiles.php?group_id=1369&package_id=175103
Reading http://numeric.scipy.org
Best match: numpy 1.6.1
Downloading http://pypi.python.org/packages/source/n/numpy/numpy-1.6.1.zip#md5=462c22b8eb221c78ddd51de98fbb5979
Processing numpy-1.6.1.zip
Running numpy-1.6.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-AoFmdV/numpy-1.6.1/egg-dist-tmp-JH1j2R
non-existing path in 'numpy/distutils': 'site.cfg'
Could not locate executable g77
Found executable /opt/solstudio12.2/bin/f77
gnu: no Fortran 90 compiler found
gnu: no Fortran 90 compiler found
Found executable /opt/intel/Compiler/11.1/073/bin/intel64/ifort
Could not locate executable lf95
Could not locate executable pgf90
Could not locate executable pgf77
Found executable /opt/solstudio12.2/bin/f90
Found executable /opt/solstudio12.2/bin/f95
Could not locate executable fort
_configtest.c:1: warning: conflicting types for built-in function ‘exp’
_configtest.o: In function `main':
/tmp/easy_install-AoFmdV/numpy-1.6.1/_configtest.c:6: undefined reference to `exp'
collect2: ld returned 1 exit status
_configtest.c:1: warning: conflicting types for built-in function ‘exp’
_configtest.c:1:20: error: Python.h: No such file or directory
_configtest.o: In function `main':
/tmp/easy_install-AoFmdV/numpy-1.6.1/_configtest.c:6: undefined reference to `exp'
collect2: ld returned 1 exit status
_configtest.c:1:20: error: Python.h: No such file or directory

person Woltan    schedule 03.01.2012    source источник


Ответы (3)


Это известная проблема, отслеживаемая на странице numpy/numpy #2434.

Я нашел обходной путь: добавить numpy к setup_requires. Наличие его как в setup_requires, так и в install_requires, кажется, отлично работает с самой последней версией setuptools.

Итак, ваш setup.py должен выглядеть примерно так

setup(
    # Your setup specific stuff here
    setup_requires=["numpy"],  # Just numpy here
    install_requires=["numpy"],  # Add any of your other dependencies here
)
person tbekolay    schedule 02.12.2014
comment
Добавления numpy в setup_requires было недостаточно. Мне также пришлось запустить python setup.py unstall дважды, чтобы успешно установить numpy, см. также stackoverflow.com/questions/21605927/ - person asmaier; 08.04.2015

Если у вас нет доступа к бинарному дистрибутиву (предварительно скомпилированному/построенному) для numpy, вам потребуются доступные заголовки python, поскольку они нужны для сборки numpy. Вот почему большинство менеджеров пакетов поставляются с предварительно скомпилированными версиями этих пакетов. Например, вы можете apt-get install python-numpy связать это с вашим virtualenv, и когда вы попытаетесь установить свою программу с помощью install_requires=['numpy'], она должна увидеть, что она уже установлена.

person Michael Merickel    schedule 03.01.2012
comment
Нет ли способа сказать setuptools собрать numpy перед его установкой? Самостоятельная сборка и установка numpy работает отлично... - person Woltan; 03.01.2012
comment
Мне жаль, что я не слежу. Из вашего вставленного вывода он пытается собрать numpy. - person Michael Merickel; 03.01.2012
comment
Верно, но я могу собрать и установить numpy, скачав его самостоятельно (не с setuptools). Только если я попытаюсь собрать и установить его с помощью setuptools, он сломается. - person Woltan; 03.01.2012
comment
Вы передаете ему специальные параметры, когда строите его самостоятельно? setuptools просто пытается запустить python setup.py install я полагаю. - person Michael Merickel; 03.01.2012
comment
Я просто делаю python setup.py build && python setup.py install в распакованном архиве numpy. И я не могу подтвердить, что setuptools пытался настроить только python setup.py install. Если я делаю только python setup.py install в свежем распакованом архиве, он тоже собирается и устанавливается правильно. - person Woltan; 03.01.2012
comment
Похоже, он пытается запустить bdist_egg. Я бы порекомендовал просто установить его самостоятельно, тогда пакет, для которого он требуется, не будет пытаться установить его снова. В противном случае, надеюсь, кто-то другой может дать вам лучший ответ о том, как уговорить setuptools запустить правильную последовательность команд для numpy! - person Michael Merickel; 03.01.2012
comment
Похоже, существует разница между вашей стандартной средой и той, которая использовалась во время установки вашего пакета с помощью setuptools. Например, не найдены не только заголовочные файлы Python, но и компилятор Fortran (требуется, поскольку некоторые алгоритмы Numpy находятся на Fortran). - person holdenweb; 15.12.2012

Чтобы установить numpy, setuptools загрузит пакет и скомпилирует его из исходного кода. Однако есть некоторые предварительные условия для компиляции numpy, вы можете проверить их здесь.

_configtest.c:1:20: error: Python.h: No such file or directory

эта ошибка указывает на то, что по крайней мере у вас не установлен пакет python-dev (если вы используете ubuntu/debian).

person Chunliang Lyu    schedule 26.11.2012