简而言之,用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,则simd.so会在simdlib目录中生成。
但是,如果我注释setup.py的第一行,并取消注释第二行以setuptools替换distutils,则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安装)遇到的问题。
最佳答案
因此,我通过执行setup.py进行了调试,只需要为扩展名编写“ simdlib.simd”而不是“ simdlib / simd”。当然,前者也可以与Distutils一起使用,因此,setuptools在这里与尴尬的前者语法不向后兼容。