Python包装:作为依赖的提升库

问题描述:

假设有人想要打包依赖于C++ boost库的Python(Cython)库。Python包装:作为依赖的提升库

什么是配置setup.py的最佳方法,以便用户能够正确获知需要安装boost库(即,在Ubuntu等中的apt-get install libboost-dev在其他操作系统中)?或者将boost库包含在python包发行版中是一种更好的做法吗?

+0

我不确定是否有一个很好的方法来在运行时检测到这一点。也许尝试编译一个简单的测试程序,使用boost,看看编译失败? – ngoldbaum

+0

@ngoldbaum我已经这样做了。问题更多的是像boost这样的外部依赖的最佳实践。简而言之,您是否将boost库包含在包中(仅包含头文件),或者在安装python包期间向用户报告错误。 – Zouzias

+0

我同意Danny的回答。如果没有可用的轮子,那么如果所需的外部库不可用,则应该在setup.py中输出一个有用的错误消息。 – ngoldbaum

的问题是更好地问,

什么是分发Python扩展,包括 外部库的依赖关系的最佳途径。

这更好地处理二进制轮包。

用户不需要知道任何关于setup.py的信息,该信息用于构建和安装源代码。用户只需要下载并安装二进制轮包。

只包含头文件并不能解决需要库构建和链接的问题。它也带来了版本不兼容的问题。

所以setup.py不需要任何特别的关于这些,它只是需要知道在哪里可以找到标题,这将是你的项目中的子目录,如果包含库和链接的库。

该文档应该包括如何从源代码构建的说明,不仅仅需要提升(python头文件,适当的编译器等)。

auditwheel之类的工具会将外部库依赖关系捆绑到二进制轮子中,因此最终用户不需要安装库来使用您的包。

另请参阅manylinux分发二进制Python扩展和this demo project