AFAIK,没有很好的标准方法可以用你的包便携式安装依赖项。Continuum至少有一些人主张将 conda 作为一种解决方案。不幸的是,您可能必须自己为其中一些依赖项制作 conda 包。
如果您没有可移植性也没问题,那么以目标机器的包管理器为目标显然可以工作。否则,对于便携式包管理器,conda 是我所知道的唯一选择。
或者,从您的帖子(“动态编译不是一种选择”)听起来可移植性对您来说可能不是问题,在这种情况下,您还可以将所有要求安装到前缀目录(我来的大多数安装程序跨支持一个configure --prefix=/some/dir/
选项)。如果您有保证的单一架构,您可能可以将所有依赖项前缀安装到单个目录并像文件一样传递它。conda 方法可能会更干净,但我已经使用了相当多的前缀安装,它们往往是最简单的解决方案之一。
编辑:
至于 conda,它同时是一个包管理器和一个类似“virtualenv”的环境/python 安装。虽然 virtualenv 是在现有的 python 安装之上添加的,但 conda 会接管整个安装,因此您可以更加确定所有依赖项都得到了考虑。与 pip 相比,它旨在添加通用的非 Python 依赖项,而不仅仅是编译 C/Cpp 扩展。有关更多信息,我会看到:
至于如何将 conda 用于您的目的,文档解释了如何创建配方:
Conda 构建框架
构建一个包需要一个配方。配方是包含以下文件的平面目录:
meta.yaml
(元数据文件)
build.sh
(使用 bash 执行的 Unix 构建脚本)
bld.bat
(使用 cmd 执行的 Windows 构建脚本)
run_test.py
(可选的 Python 测试文件)
- 源补丁(可选,见下文)
- 其他资源,不包含在源代码中且无法由构建脚本生成。
应该使用相同的配方在所有平台上构建包。
构建包时,会调用以下步骤:
- 读取元数据
- 下载源代码(到缓存中)
- 在源目录中提取源
- 应用补丁
- 创建构建环境(这里安装了构建依赖项)
- 运行实际的构建脚本。当前工作目录是设置了环境变量的源目录。构建脚本安装到构建环境中
- 做一些必要的后处理步骤:shebang、rpath 等。
- 将 conda 元数据添加到构建环境
- 将构建环境中的新文件打包成一个 conda 包
- 测试新的 conda 包:
conda-recipes
<https://github.com/continuumio/conda-recipes>
_ repo中有许多 conda 包的示例配方。
:ref:conda skeleton <skeleton_ref>
命令可以帮助为通用存储库制作骨架配方,例如PyPI <https://pypi.python.org/pypi>
_。
然后,作为客户端,您将安装包,类似于从 pip 安装的方式
最后,docker对你来说可能也很有趣,尽管我还没有看到它在 Python 中被广泛使用。