使用setuptools安装numpy作为依赖项

23 投票
3 回答
18286 浏览
提问于 2025-04-17 09:26

这可能是对这个问题的后续提问。

我正在使用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

3 个回答

2

要安装 numpy,setuptools 会下载这个软件包并从源代码编译它。不过,编译 numpy 之前,有一些必要的准备工作,你可以在 这里 查看。

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

这个错误提示说明你至少没有安装 python-dev 这个软件包(如果你使用的是 ubuntu 或 debian 系统)。

3

除非你能找到一个已经编译好的numpy版本,不然你需要有Python的头文件,因为在安装numpy的时候需要用到这些文件。这就是为什么大多数软件包管理工具会提供这些软件包的预编译版本。例如,你可以用apt-get install python-numpy来安装numpy,然后把它链接到你的虚拟环境中。当你尝试用install_requires=['numpy']来安装你的程序时,它应该会发现numpy已经安装好了。

6

这是一个已知的问题,可以在 numpy/numpy #2434 上找到相关信息。

我找到了一种解决方法:在 setup_requires 中添加 numpy。把它同时放在 setup_requiresinstall_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
)

撰写回答