Python包装:作为依赖的提升库
问题描述:
假设有人想要打包依赖于C++ boost库的Python(Cython)库。Python包装:作为依赖的提升库
什么是配置setup.py
的最佳方法,以便用户能够正确获知需要安装boost库(即,在Ubuntu等中的apt-get install libboost-dev
在其他操作系统中)?或者将boost库包含在python包发行版中是一种更好的做法吗?
答
的问题是更好地问,
什么是分发Python扩展,包括 外部库的依赖关系的最佳途径。
这更好地处理二进制轮包。
用户不需要知道任何关于setup.py
的信息,该信息用于构建和安装源代码。用户只需要下载并安装二进制轮包。
只包含头文件并不能解决需要库构建和链接的问题。它也带来了版本不兼容的问题。
所以setup.py
不需要任何特别的关于这些,它只是需要知道在哪里可以找到标题,这将是你的项目中的子目录,如果包含库和链接的库。
该文档应该包括如何从源代码构建的说明,不仅仅需要提升(python头文件,适当的编译器等)。
像auditwheel之类的工具会将外部库依赖关系捆绑到二进制轮子中,因此最终用户不需要安装库来使用您的包。
另请参阅manylinux分发二进制Python扩展和this demo project。
我不确定是否有一个很好的方法来在运行时检测到这一点。也许尝试编译一个简单的测试程序,使用boost,看看编译失败? – ngoldbaum
@ngoldbaum我已经这样做了。问题更多的是像boost这样的外部依赖的最佳实践。简而言之,您是否将boost库包含在包中(仅包含头文件),或者在安装python包期间向用户报告错误。 – Zouzias
我同意Danny的回答。如果没有可用的轮子,那么如果所需的外部库不可用,则应该在setup.py中输出一个有用的错误消息。 – ngoldbaum