gpt4 book ai didi

python - 为什么 setup_requires 不能为 numpy 正常工作?

转载 作者:太空狗 更新时间:2023-10-29 18:04:40 27 4
gpt4 key购买 nike

我想创建一个 setup.py 文件来自动解析对 numpy 的构建时依赖性(用于编译扩展)。我的第一个猜测是使用 setup_requires 和子类命令类来导入 numpy 模块:

from setuptools import setup, Extension
from distutils.command.build import build as _build

class build(_build):
def run(self):
import numpy
print(numpy.get_include())
_build.run(self)

setup(
name='test',
version='0.0',
description='something',
cmdclass={'build':build},
setup_requires=['numpy'],
)

现在,运行 python setup.py build 成功编译 numpy 但随后失败(在 build.run 内):

AttributeError: 'module' object has no attribute 'get_include'

但是,如果再次运行相同的命令,命令现在会成功(并且不需要重新编译 numpy)。

我已经在 python{2.6,2.7,3.3} 上使用和不使用 virtualenv 在最近版本的 setuptools 上测试了这个。

我看到一个workaround using pkg_resources.resource_filename这似乎工作得很好,如果我们想要的只是包含目录。 编辑:仅适用于 python2!

但是,我现在很好奇。 setup_requires 的使用有哪些注意事项? numpy 无法正常工作的原因可能是什么?对于一些更简单的模块,似乎没有问题。

最佳答案

发现,通过检查 numpy/__init__.py 中的 __NUMPY_SETUP__ 阻止了 numpy 模块的正确初始化:

if __NUMPY_SETUP__:
import sys as _sys
_sys.stderr.write('Running from numpy source directory.\n')
del _sys
else:
# import subodules etc. (main branch)

此全局状态不会在安装后由 setuptools 重置。以下作品:

...
def run(self):
__builtins__.__NUMPY_SETUP__ = False
import numpy
...

关于python - 为什么 setup_requires 不能为 numpy 正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21605927/

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