setuptools build_ext的行为与distutils不同吗?

时间:2015-03-14 11:56:02

标签: python setuptools distutils

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

以下是详细信息。首先是布局:

.
├── 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,则会在simdlib目录中生成simd.so。

但是,如果我注释setup.py的第一行并取消注释第二行以通过setuptools替换distutils,那么simd.so将在top目录中生成,而不是像之前一样在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安装)的问题。

1 个答案:

答案 0 :(得分:2)

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