在Ubuntu Python 3上构建的Cython + distutils在链接期间更改模块lib名称

 放开丶那手 发布于 2022-12-28 19:38

我正在使用Cython和distutils. 我的一个测试期间,构建了二进制扩展模块.在此之后,我的其他测试之一将import是二进制模块并对其进行测试.在Travis-CI上,链接器命令更改名称.请参阅下面的屏幕截图:编译器正确构建test01.o,但链接器错误地创建test01.cpython-34m.so:我想要test01.so.

在此输入图像描述

上面的截图适用于Python 3.4; Python 2.7没有发生这个问题,导致我怀疑特定于Python的distutils可能会采取不同的做法.

distutils setup()函数,从我的主脚本调用,没有什么特别之处:

setup(
    cmdclass = {'build_ext': build_ext},
    ext_modules = ext_modules,
    include_dirs=[numpy.get_include()]
)

ext_modulesExtension()从中导入的一系列类distutils.extension.

我已经完成了针对2.7和3.4的distutils文档,没有任何东西像我一样跳出来.什么可能导致名称更改,以及我可以指定哪些选项,setup()或者Extension()实例化以防止名称更改?


编辑:我已经设置了一个运行Ubuntu 13.10的本地虚拟机,并且可以确认,如上所述,Python 2.7 test01.so在Python 3.4生成时生成test01.cpython-34m.so.因此这个问题与travis-ci无关,我正在删除该标签并编辑标题.


编辑:确实这是一个改变distutils,在3.2中.我还在弄清楚我能做些什么来让我的导入声明看起来正确.


编辑: OMG在python docs中的helloworld示例在helloworld.cpython-34m.soUbuntu 13.10上的Python 3.4.1(Anaconda)上生成.Python的sysconfig模块启动了sysconfig.get_config_var('SO') == 'cpython-34m.so'.

我感到很吵了.

1 个回答
  • 由于@ncoghlan_dev,神秘解决了.重命名更改在PEP 3149中进行.事实证明,即使二进制扩展模块可能被称为类似的helloworld.cpython-34m.so,当你实际上在python解释器中时,import helloworld 仍然有效.我的travis测试失败了,因为我有一个测试,检查编译文件的名称.so.如果我删除该测试,文件的其余部分仍然可以工作.

    2022-12-28 19:41 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有