简而言之,用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在这里与尴尬的前者语法不向后兼容。

09-26 07:06