简而言之,用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安装)的问题。
答案 0 :(得分:2)
所以我通过执行setup.py进行调试,我只需要编写" simdlib.simd"而不是" simdlib / simd"作为扩展名。前者当然也适用于Distutils,因此这里的setuptools与后来的语法不兼容。