【问题标题】:Does setuptools build_ext behaves differently from distutils one?setuptools build_ext 的行为是否与 distutils 不同?
【发布时间】:2015-05-16 21:39:45
【问题描述】:

简而言之,将 distutils 导入替换为 setuptools 会导致共享库在就地构建中的不同位置生成。

这里是详细信息。首先是布局:

.
├── setup.py
└── simdlib
    ├── __init__.py
    ├── simd.c
    └── test.py

然后是 setup.py 脚本:

from distutils.core import setup, Extension
#from setuptools import setup, Extension
from Cython.Build import cythonize

setup(name='simdlib',
      ext_modules=[Extension('simdlib/simd', ['simdlib/simd.c'])])

如果我运行 python setup.py build_ext -i,那么 simd.so 会在 simdlib 目录中生成。

但是,如果我注释 setup.py 的第一行并取消注释第二行以将 distutils 替换为 setuptools,则 simd.so 会在顶级目录中生成,而不是像以前那样在 simdlib 中生成。在这种情况下有一行额外的输出:

copying build/lib.macosx-10.9-x86_64-2.7/simdlib/simd.so -> 

我在很多地方读到 setuptools 可以取代 distutils,所以我很困惑。

一方面,我在 Python 2.7.9 和 setuptools 3.6(由 virtualenv 安装)以及 Python 3.4.3 和 setuptools 12.05(由 pyvenv 安装)遇到了这个问题。

【问题讨论】:

    标签: python setuptools distutils


    【解决方案1】:

    所以我通过 setup.py 的执行进行了调试,我只需要编写“simdlib.simd”而不是“simdlib/simd”作为扩展名。前者当然也适用于 Distutils,所以只是 setuptools 在这里与笨拙的前者语法不向后兼容。

    【讨论】:

      猜你喜欢
      • 2014-10-09
      • 2021-06-19
      • 2016-09-17
      • 2010-11-28
      • 2013-07-22
      • 1970-01-01
      • 2011-09-14
      相关资源
      最近更新 更多