当前位置: 首页 > 知识库问答 >
问题:

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

汪丁雷
2023-03-14

我正在使用pybind11,并按照pybind/cmake_example中的描述,使用setupool和cmake构建python模块:

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

在本地,使用python设置。py sdist build一切正常,我可以使用和/或从生成的文件安装包。

我现在想把这个包上传到PyPI。从另一个python包中,我知道如何通过操纵控制盘的平台标记来生成通用linux库(另请参见此处):

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时,如何生成适当的平台标记?这是否应该以某种方式构建为轮子而不是扩展(可能与GH上的此问题有关)?

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

  • 主要问题是我无法将当前Ubuntu构建的包更新为PyPI:ValueError:Unknown分发格式:'libraryname-0.8。0.cpython-35m-x86_64-linux-gnu。所以“
  • 如果平台标记不能或不应该更改:跨平台将pybind11模块上载到PyPI的最佳实践是什么

共有1个答案

子车新立
2023-03-14

我的错!

事实证明,这种混乱是由于我最初尝试运行Pythonsetup.pysdistbdist_wheel时的构建错误造成的。用python手工构建setup.py构建不是发布包的正确方法。

注意:该文件的名称。因此,需要在不使用-0.8的情况下设置文件。0version identifier以便python能够从控制盘进行导入。

总而言之:构建和发布二进制轮子与pybind11的工作原理与cpython的工作原理完全相同,遵循pybind/cmake_示例应该可以很好地工作。

 类似资料:
  • 该部分 API 将帮助您使用 mBuild 电子模块平台以扩展光环板的功能和使用场景。 注意:你需要额外购买包含 mBuild 电子模块扩展包或套装来获得 mBuild 模块以使用这些功能。 输入类 mbuild 模块 输出类 mbuild 模块 其他 mBuild 扩展模块

  • 问题内容: 我的项目中有多个模块,它们直接或可传递地相互依赖。当我构建«Project A»时,有些地方«Project D»会自动构建。 «Project D»pom片段是: 在构建«Project A»时会自动构建«Project B»,根据我的理解,应该在其中一个项目中添加某个地方作为依赖项,但是在这些项目的pom下我没有发现任何字符串引用。 知道在没有子项目出现在上游项目的情况下,还有什么

  • 我得到这个消息从终端时运行我的项目与命令。我不得不说在今天之前一切都很好,Xcode从我的苹果电脑上更新了。 我什么都试过了,但没有成功。需要帮忙吗? 以下生成命令失败: Ld/Users/RobertoDiCarrera/documents/wander/wanderapp/Platform/ios/build/emulator/HelloWorld。app/HelloWorld normal

  • 问题内容: 我想在linux中找到一个易于使用的OCR python模块,我发现pytesser http://code.google.com/p/pytesser/,但是它包含一个.exe可执行文件。 我尝试过更改代码以使用wine,它确实有效,但是它太慢了,真的不是一个好主意。 有没有像它一样易于使用的Linux替代品? 问题答案: 您可以只包装一个函数: 如果您希望文档分割和更多高级功能,请

  • 本文向大家介绍Python标准库笔记struct模块的使用,包括了Python标准库笔记struct模块的使用的使用技巧和注意事项,需要的朋友参考一下 最近在学习python网络编程这一块,在写简单的socket通信代码时,遇到了struct这个模块的使用,当时不太清楚这到底有和作用,后来查阅了相关资料大概了解了,在这里做一下简单的总结。 了解c语言的人,一定会知道struct结构体在c语言中的作

  • 本文向大家介绍使用Python的内建模块collections的教程,包括了使用Python的内建模块collections的教程的使用技巧和注意事项,需要的朋友参考一下 collections是Python内建的一个集合模块,提供了许多有用的集合类。 namedtuple 我们知道tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成: 但是,看到(1, 2),很难看出这个tuple是用