gpt4 book ai didi

python - 如何在 setup.py 中引导 numpy 安装

转载 作者:IT老高 更新时间:2023-10-28 22:00:45 33 4
gpt4 key购买 nike

我有一个项目,它有一个需要 numpy 的 C 扩展。理想情况下,我希望下载我的项目的人能够运行 python setup.py install 或使用一次调用 pip。我遇到的问题是,在我的 setup.py 中,我需要导入 numpy 来获取标题的位置,但我希望 numpy 只是 install_requires 中的常规要求code> 以便自动从 Python Package Index 下载。

这是我正在尝试做的一个示例:

from setuptools import setup, Extension
import numpy as np

ext_modules = [Extension('vme', ['vme.c'], extra_link_args=['-lvme'],
include_dirs=[np.get_include()])]

setup(name='vme',
version='0.1',
description='Module for communicating over VME with CAEN digitizers.',
ext_modules=ext_modules,
install_requires=['numpy','pyzmq', 'Sphinx'])

显然,在安装之前,我无法在顶部 import numpy。我已经看到一个 setup_requires 参数传递给 setup() 但找不到任何关于它的用途的文档。

这可能吗?

最佳答案

以下内容至少适用于 numpy1.8 和 python{2.6,2.7,3.3}:

from setuptools import setup
from setuptools.command.build_ext import build_ext as _build_ext

class build_ext(_build_ext):
def finalize_options(self):
_build_ext.finalize_options(self)
# Prevent numpy from thinking it is still in its setup process:
__builtins__.__NUMPY_SETUP__ = False
import numpy
self.include_dirs.append(numpy.get_include())

setup(
...
cmdclass={'build_ext':build_ext},
setup_requires=['numpy'],
...
)

关于一个小的解释,看看为什么没有“hack”会失败,见this answer .

注意,使用 setup_requires 有一个微妙的缺点:numpy 不仅会在构建扩展之前被编译,而且在执行 python setup.py --help 时也会被编译,例如例子。为避免这种情况,您可以检查命令行选项,如 https://github.com/scipy/scipy/blob/master/setup.py#L205 中的建议。 ,但另一方面,我真的认为这不值得。

关于python - 如何在 setup.py 中引导 numpy 安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19919905/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com