问题 在Python轮中包含运行时依赖项


我想分发一个完整的virtualenv,或者一堆具有运行时依赖性的精确版本的Python轮,例如:

  • pycurl
    • pycurl.so
      • libcurl.so
        • libz.so
        • libssl.so
        • libcrypto.so
        • libgssapi_krb5.so
          • libkrb5.so
            • libresolv.so

我想我可以依赖系统安装libssl.so,但肯定不是libcurl.so的正确版本,可能不是Kerberos。

在具有所有运行时依赖性的轮中打包一个库的最简单方法是什么?

或者这是一个傻瓜的差事,我应该打包整个virtualenv? 如何可靠地做到这一点?

附:动态编译不是一种选择,一些模块是修补的。


12872
2017-09-24 14:47


起源



答案:


AFAIK,没有很好的标准方法可以在您的软件包中可移植地安装依赖项。 Continuum有 为这个目的做了conda。 numpy家伙在他们的包中编写了自己的distutils子模块来安装一些复杂的依赖项,现在 至少其中一些人主张将康达作为解决方案。不幸的是,您可能必须自己为其中一些依赖项制作conda包。

如果你没有可移植性就好了,那么定位目标机器的包管理器显然会有效。否则,对于便携式包管理器,conda是我所知道的唯一选择。

另外,从您的帖子(“动态编译不是一个选项”)听起来像可移植性可能不是一个问题,在这种情况下,您也可以将所有要求安装到前缀目录(我遇到的大多数安装程序)支持 configure --prefix=/some/dir/ 选项)。如果您有一个有保证的单一体系结构,您可以将所有依赖项前缀 - 安装到单个目录中,并像文件一样传递它。 conda方法可能会更干净,但我已经使用了相当多的前缀安装,它们往往是最容易实现的解决方案之一。

编辑:  至于conda,它同时是一个包管理器和类似“virtualenv”的环境/ python安装。虽然virtualenv是在现有的python安装之上添加的,但conda接管整个安装,因此您可以更加确定所有依赖项都被考虑在内。与pip相比,它被设计用于添加通用的非Python依赖项,而不仅仅是编译C / Cpp exentions。有关详细信息,我会看到:

至于如何使用康达为您的目的, 文档 解释如何创建配方:

Conda构建框架

构建包需要配方。食谱是平面目录   包含以下文件:

  • meta.yaml (元数据文件)
  • build.sh (使用bash执行的Unix构建脚本)
  • bld.bat  (使用cmd执行的Windows构建脚本)
  • run_test.py(可选的Python测试文件)
  • 补丁到源(可选,见下文)
  • 其他资源,不包含在源中,也不能包含在内   由构建脚本生成。

应该使用相同的配方在所有平台上构建包。

构建包时,将调用以下步骤:

  1. 阅读元数据
  2. 下载源(进入缓存)
  3. 提取源中的 源目录
  4. 应用补丁
  5. 创建一个 建立环境 (这里安装了构建依赖项)
  6. 运行实际的构建脚本。当前工作目录是源   设置了环境变量的目录。构建脚本安装到   构建环境
  7. 做一些必要的后处理步骤:shebang,rpath等。
  8. 将conda元数据添加到构建环境中
  9. 将构建环境中的新文件打包到conda包中
  10. 测试新的conda包:      
    • 创建一个 测试环境 包(及其依赖项)
    • 运行测试脚本

有很多conda包的示例配方 conda-recipes <https://github.com/continuumio/conda-recipes>_ repo。

裁判:conda skeleton <skeleton_ref> 命令可以帮助制作常见的骨架食谱   存储库,例如 PyPI <https://pypi.python.org/pypi>_。

然后,作为客户端,您将安装该程序包 类似于你从pip安装的方式

最后, 搬运工人 你也可能感兴趣,虽然我还没有看到它用于Python。


9
2017-10-01 14:15





您可能想要了解PEX: https://pex.readthedocs.io/en/stable/whatispex.html

'扩展名为.pex的文件 - “PEX文件”或“.pex文件” - 是自包含的可执行Python虚拟环境。 PEX文件可以轻松部署Python应用程序:部署过程变得简单scp。


1
2018-05-17 15:36