创建一个独立的 pip 包的最佳方法是什么,它可以在任何安装了裸包的机器上运行?
说,我想打包pelican,以便它可以在所有安装了 python 的计算机上运行(假设所有依赖项都是纯 python)。
我的想法有两种解决方案:捆绑和pip install --no-install
技巧。
使用bundles
:
$ virtualenv venv
$ venv/bin/pip install pelican
$ venv/bin/pip freeze > all-packages.txt
$ venv/bin/pip bundle allpackages.pybundle -r all-packages.txt
(我创造venv
了一个干净的环境,all-packages.txt
只包含鹈鹕需要的东西)
你只需要分发allpackages.pybundle
,谁想要那些必须做的包:
$ venv/bin/pip install allpackages.pybundle -r all-packages.txt
使用pip install --no-install
:
pip 可以将所有包下载到一个目录,您可以分发这些包。假设你已经all-packages.txt
包含了所有需要分发的包,你可以使用--no-install
with--download-dir
选项:
$ mkdir tarballs
$ venv/bin/pip install --no-install --download-dir=tarballs -r all-packages.txt
如果您使用最后一个技巧并想使用 pip 安装这些软件包:
$ venv/bin/pip install --no-deps --no-index tarballs/*
该选项no-deps
是必需的,因为 pip 在安装 wnated 包之前会查找依赖项。我曾经--no-index
只是向您展示 pip 不需要去 PyPI 查找任何内容,并且您在该步骤中甚至不需要互联网连接。
请注意:PIP 版本 7 + 已替换(至少那是我测试此命令的版本)
--no-install
选项
--download or -d
因此,要按照上面示例中的说明下载 pelican 所需的所有软件包,您将运行:
pip install -d tarballs pelican