Linux python 使用 pybind11 构建的模块的平台标签

Linux platform tag for python module built with pybind11

我正在使用 pybind11 并使用 setuptools 和 cmake 构建 python 模块,如 pybind/cmake_example:

中所述
setup(
    name='libraryname',
    ...
    ext_modules=[CMakeExtension('libraryname')],
    cmdclass=dict(build_ext=CMakeBuild),
)

在本地,使用 python setup.py sdist build 一切都很好,我可以使用 and/or 从生成的文件安装包。

我现在要上传包到 PyPI。 从不同的 python 包我知道如何通过操纵轮子的平台标签生成通用 linux 库(另请参阅 here):

class bdist_wheel(bdist_wheel_):
    def finalize_options(self):
        from sys import platform as _platform
        platform_name = get_platform()
        if _platform == "linux" or _platform == "linux2":
            # Linux
            platform_name = 'manylinux1_x86_64'

        bdist_wheel_.finalize_options(self)
        self.universal = True
        self.plat_name_supplied = True
        self.plat_name = platform_name

setup(
    ...
    cmdclass = {'bdist_wheel': bdist_wheel},
)

问题:

没有构建bdist_wheel时如何生成合适的平台标签? 这应该以某种方式构建为轮子而不是扩展(可能与 this issue on GH 相关)?

此外,pybind11 是如何决定生成的库的后缀(在我的 linux 上,它不仅是 .so,而且是 .cpython-35m-x86_64-linux-gnu.so)?

跟进:

我的错!

事实证明,混淆是由于我最初尝试 运行 python setup.py sdist bdist_wheel 时遇到的构建错误造成的。 使用 python setup.py build 手动构建不是发布包的正确方法。

注意:为了python需要设置没有-0.8.0版本标识符的.so文件名从车轮进口。

总结一下: 构建和发布二进制轮子与 pybind11 的工作方式完全相同,例如cpython 并且遵循 pybind/cmake_example.

应该可以正常工作