在Python控制盘中包含运行时依赖项

在Python控制盘中包含运行时依赖项,python,python-2.7,python-wheel,Python,Python 2.7,Python Wheel,我想发布一个完整的virtualenv,或者一堆Python轮子,它们的确切版本及其运行时依赖关系,例如: 皮克尔 那么 libcurl.so libz.so libssl.so libcrypto.so libgssapi_krb5.so libkrb5.so libresolv.so 我想我可以依靠系统安装libssl.so,但肯定不是正确版本的libcurl.so,可能不是Kerberos 将一个库打包到一个轮子中并包含所有运行时依赖项的最简单方法是什么 或者这是一

我想发布一个完整的virtualenv,或者一堆Python轮子,它们的确切版本及其运行时依赖关系,例如:

  • 皮克尔
    • 那么
      • libcurl.so
        • libz.so
        • libssl.so
        • libcrypto.so
        • libgssapi_krb5.so
          • libkrb5.so
            • libresolv.so
我想我可以依靠系统安装libssl.so,但肯定不是正确版本的libcurl.so,可能不是Kerberos

将一个库打包到一个轮子中并包含所有运行时依赖项的最简单方法是什么

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


另外,动态编译不是一个选项,有些模块是经过修补的。

AFAIK,没有好的标准方法可移植地安装软件包中的依赖项。连续体有很多优点。numpy的人在他们的包中编写了他们自己的distutils子模块来安装一些复杂的依赖项,现在。不幸的是,您可能必须自己为其中一些依赖项制作conda包

如果您没有可移植性,那么将目标机器的包管理器作为目标显然是可行的。否则,对于便携式软件包管理器,conda是我所知道的唯一选项

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

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

  • (也建议作为一种可能性)
关于如何使用康达达到您的目的,请解释如何创建配方:

Conda构建框架 构建一个包需要一个配方。菜谱是一个平面目录 包含以下文件:

  • meta.yaml
    (元数据文件)
  • build.sh
    (使用bash执行的Unix构建脚本)
  • bld.bat
    (使用cmd执行的Windows构建脚本)
  • run_test.py
    (可选Python测试文件)
  • 源代码的修补程序(可选,请参见下文)
  • 其他资源,这些资源不包括在源中,因此无法删除 由构建脚本生成
在所有平台上构建包都应该使用相同的方法

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

  • 阅读元数据
  • 下载源(到缓存中)
  • 在源目录中提取源
  • 应用补丁
  • 创建生成环境(此处安装生成依赖项)
  • 运行实际的构建脚本。当前工作目录是源目录 已设置环境变量的目录。构建脚本将安装到中 构建环境
  • 执行一些必要的后处理步骤:shebang、rpath等
  • 将conda元数据添加到生成环境
  • 将生成环境中的新文件打包到conda包中
  • 测试新的conda软件包:
    • 使用包(及其依赖项)创建测试环境
    • 运行测试脚本
  • conda配方中有许多conda包的示例配方
    
    \urepo

    :ref:
    conda skeleton
    命令有助于为常见的 存储库,例如
    PyPI
    \

    然后,作为客户机,您将安装该包


    最后,您可能也对它感兴趣,尽管我还没有看到它在Python中有太多的用途

    您可能需要查看PEX:

    “扩展名为.pex的文件—“pex文件”或“.pex文件”——是自包含的可执行Python虚拟环境。PEX文件使部署Python应用程序变得很容易:部署过程变成了简单的scp