gpt4 book ai didi

python - 如何使用依赖隔离分发和部署 Python 3 代码

转载 作者:太空狗 更新时间:2023-10-30 01:34:49 25 4
gpt4 key购买 nike

我对目前部署 Python 代码的方式不满意,我想知道是否有更好的方法。首先我会解释我在做什么,然后是缺点:

  • 在开发时,我使用 virtualenv 进行依赖隔离并使用 pip 安装所有库。 Python 本身来 self 的操作系统 (Ubuntu)
  • 然后我将我的代码构建到一个“.deb”debian 包中,该包由我的源代码树和我的依赖项的 pip 包组成
  • 然后当我部署时,我重建 virtualenv 环境,source foo/bin/activate 然后运行我的程序(在 Ubuntu 的 upstart 下)

问题如下:

  1. pip 包非常大,显着增加了 debian 包的大小。这没什么大不了的,但很烦人。
  2. 我每次部署时都必须构建所有 C 库(PyMongo、BCrypt 等)。这需要一点时间(几分钟),而且在生产环境中完成这种 CPU 密集型工作有点蹩脚

这是我的限制条件:

  1. 必须在 Python 3 上工作。最好是 3.2
  2. 必须有依赖隔离
  3. 必须使用使用 C 的库(如 PyMongo)

我听说过关于卡住的事情,但我没能让它发挥作用。 Pypi 中的 cx_freeze 似乎无法编译(至少在我的 Python 上)。其他卡住实用程序似乎不适用于 Python 3。我怎样才能做得更好?

最佳答案

Wheel可能是目前执行此操作的最佳方式。

在部署机器上创建一个 virtualenv,并将 wheel 连同任何依赖项(也构建为 wheel)部署到该 virtualenv。

这解决了问题:

  1. 为依赖项提供单独的轮子意味着您不必重新部署未更改的依赖项,从而减少部署工件的大小
  2. 可以在本地构建大包(如lxml或scipy),然后将编译好的轮子推送到生产环境

此外,它可以很好地与使用 C 的库一起工作。

关于python - 如何使用依赖隔离分发和部署 Python 3 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13593594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com