如何创建一个独立的pip包(包括所有deps)

HBa*_*ase 2 python pip

什么是创建独立pip包的最佳方法,它可以在安装了裸包的任何机器上运行?

说,我想打包pelican,以便它可以在所有安装了python的计算机上运行(假设所有依赖项都是纯python).

Hug*_*res 6

在我看来有两种解决方案:捆绑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
Run Code Online (Sandbox Code Playgroud)

(我创造venv了一个干净的环境,all-packages.txt只包含鹈鹕需要的东西)

而你只需要分发allpackages.pybundle,谁想要那些必须做的包:

$ venv/bin/pip install allpackages.pybundle -r all-packages.txt
Run Code Online (Sandbox Code Playgroud)

使用pip install --no-install:

pip可以将所有包下载到一个目录,你可以分发这些包.假设您已all-packages.txt包含需要分发的所有包,则可以使用--no-installwith --download-dir选项:

$ mkdir tarballs
$ venv/bin/pip install --no-install --download-dir=tarballs -r all-packages.txt
Run Code Online (Sandbox Code Playgroud)

如果您使用最后一个技巧并想要使用pip安装这些包:

$ venv/bin/pip install --no-deps --no-index tarballs/*
Run Code Online (Sandbox Code Playgroud)

no-deps需要该选项,因为pip在安装wnated包之前查找依赖项.我用来--no-index告诉你pip不需要去PyPI找到任何东西,你甚至不需要在那一步中连接互联网.