Python/Flask 没有 pip 的部署

Python/Flask deployment without pip

我通常使用一个相当简单的 fabric 脚本部署我的 Flask 应用程序,该脚本将源代码放在目标机器上,使用 pip 安装任何依赖项,然后使用所有必要的设置启动 uwsgi,然后关闭它。

但是,我有一个新问题,我们环境中的一些新安全设置阻止了我们访问网络外部,因此尝试使用 pip 安装我们的依赖项失败。我考虑使用 python setup.py sdist 创建一个包,认为这会在开发人员机器上构建所有内容然后我可以将 .tar.gz 上传到部署机器并安装它但它仍在尝试联系 pip 到获取依赖项。

有没有办法获得一个完整编译的包,其中包含依赖项以及我可以用来部署到我的服务器的所有内容?我可以使用一些 sdist 设置吗?

假设您的构建机器与目标二进制兼容,或者您​​不需要任何已编译的扩展,您可以使用 pip wheel 将您的项目及其所有依赖项编译到 wheels,将这些文件复制到服务器,pip install 仅来自 wheel 目录。

# on build machine
cd myproject
pip wheel --wheel-dir wheelbase .
scp -r wheelbase me@target.example.org

# on target machine
pip install --no-index --find-links=wheelbase myproject

您应该也可以将奇怪的 sdist 复制到 --find-links 目录中,在这种情况下,如果您必须在服务器上重新编译,pip 将从 sdist 安装。