【问题标题】:Installing numpy as a dependency with setuptools使用 setuptools 安装 numpy 作为依赖项
【发布时间】:2012-02-01 09:54:50
【问题描述】:

这可能是this one 的后续问题。

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

【问题讨论】:

    标签: python numpy setuptools python-2.7


    【解决方案1】:

    这是一个已知问题,在 numpy/numpy #2434 上跟踪。

    我找到了解决方法:将numpy 添加到setup_requires。在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
    )
    

    【讨论】:

    【解决方案2】:

    除非您可以访问 numpy 的二进制分发(预编译/构建),否则您必须有可用的 python 头文件,因为它需要它们来构建 numpy。这就是为什么大多数包管理器都带有这些包的预编译版本的原因。例如,您可以apt-get install python-numpy,将其链接到您的 virtualenv,当您尝试使用install_requires=['numpy'] 安装程序时,它应该会看到它已经安装。

    【讨论】:

    • 没有办法告诉setuptools 在安装之前构建numpy 吗?自行构建和安装numpy 可以完美运行...
    • 对不起,我没有关注。从您粘贴的输出中,它正在尝试构建 numpy。
    • 对,但我可以自己构建和安装numpy 下载它(而不是setuptools)。只有当我尝试使用setuptools 构建和安装它时,它才会中断。
    • 自己构建时是否传递了特殊参数? setuptools 只是尝试运行 python setup.py install 我相信。
    • 我只是在解压后的numpy 存档中执行python setup.py build && python setup.py install。而且我无法确认 setuptools 仅尝试调整 python setup.py install。如果我只在新解压缩的存档中执行python setup.py install,它也会正确构建和安装。
    【解决方案3】:

    要安装numpy,setuptools 将下载包并从源代码编译它。不过编译numpy有一些先决条件,可以查看here

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

    这个错误表明至少你没有安装 python-dev 包(如果你使用的是 ubuntu/debian)。

    【讨论】:

      猜你喜欢
      • 2014-10-02
      • 2021-01-01
      • 2014-11-03
      • 2013-08-30
      • 2010-11-18
      • 2016-05-27
      • 2014-05-03
      • 2013-07-19
      • 1970-01-01
      相关资源
      最近更新 更多