linux系统python生成so_为什么Cython编译器使用后缀“cpython-35m-x86_64-linux-gnu.so”生成一个...

#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描述了如何更改添加的标识符 – 但这样做很少有充分的理由.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值