加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

为什么Cython编译器使用后缀“cpython-35m-x86_64-linux-gnu.so

发布时间:2020-12-14 01:44:51 所属栏目:Linux 来源:网络整理
导读:#setup.py from distutils.core import setupfrom distutils.extension import Extensionfrom Cython.Distutils import build_extsetup( cmdclass = {'build_ext': build_ext},ext_modules = [Extension("module_name",["xxxx.pyx",'./yyyyy.c'],language='c
#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?

谢谢

解决方法

完整描述 is available in PEP 3149.简而言之:这是从Python 3.2开始适用的更改.故意将文件标识符添加到文件名中;具有此版本标识符的文件名优先于没有使用的文件名(但如果没有其他选项可用于导入,则将使用没有版本标识符的普通.so或.pyd文件).

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

>可以将与多个版本的Python兼容的.so / .pyd文件全部编译到同一目录,从而更容易使用或分发多个版本的Python库.
>它可以防止您意外导入为错误版本的Python编译的模块.这是一件好事,因为ABI在Python版本之间不是100%兼容(但很可能是兼容的,这会给你偶尔和令人困惑的错误)

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

This question描述了如何更改添加的标识符 – 但这样做很少有充分的理由.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读