为什么Cython编译器生成后缀为“cpython35mx86”的so利努斯格努'

2024-09-30 12:27:43 发布

您现在位置:Python中文网/ 问答频道 /正文

#setup.py    
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

setup(
    cmdclass = {'build_ext': build_ext}, 
    ext_modules = [Extension("module_name", ["xxxx.pyx", './yyyyy.c'],
                    language='c',
                    extra_compile_args = ['-std=gnu11'],
                    extra_link_args=['-std=gnu11']                 
                    )]
)


$ python --version
Python 3.5.1
$ python -c "import cython; print(cython.__version__);"
0.25.2
$ python setup.py build_ext -i

问题>;为什么Cython将模块名生成为module_name.cpython-35m-x86_64-linux-gnu.so,而不是module_name.so?在

谢谢你


Tags: namefrompyimportbuildsetupextensionargs
1条回答
网友
1楼 · 发布于 2024-09-30 12:27:43

完整的描述is available in PEP 3149。简而言之:这是Python3.2以后的版本中的一个变化。故意在文件名中添加一个版本标识符;带有此版本标识符的文件名优先于没有版本标识符的文件名(但是如果没有其他选项可供导入,则使用不带版本标识符的.so或.pyd文件)。在

在.so或.pyd文件中添加有关编译所用Python版本的信息有两个主要优点:

  1. 可以将与Python的多个版本兼容的.so/.pyd文件都编译到同一个目录中,这样就可以更方便地为多个Python版本使用或分发库。在
  2. 它可以防止您意外地导入为错误版本的Python编译的模块。这是一件好事,因为ABI在Python版本之间并不是100%兼容的(但是很可能大部分都是兼容的,这会给您带来偶然的、令人困惑的bug)

文件名的更改会影响所有编译的Python模块,而不仅仅是Cython。在

This question描述了如何更改添加的标识符-但是,很少有理由这么做。在

相关问题 更多 >

    热门问题