gpt4 book ai didi

rpm - 使用 venv 和 rpm 在内部部署 python 应用程序

转载 作者:行者123 更新时间:2023-12-03 23:50:50 25 4
gpt4 key购买 nike

我正在寻找其他具有 python venv 和通过 rpm 部署应用程序经验的人。我的目标是:

  • 将 pip 用于 python 依赖
  • 使用 venv 将应用程序环境/deps 分开
  • 使用 rpm 进行部署(我们公司内部审计等要求)。

  • 对于我们部署的每个架构(阅读:发行版),我都有一个构建服务器(jenkins slave)。我通过 jenkins 工作在 jenkins slave(构建服务器)上的原始(也是唯一)计划是:
  • 创建 venv
  • 激活venv
  • python setup.py 构建/安装(在 rpm 规范内)
  • 将 rpm 归档为工件
  • 飘飘

  • 我从来没有到过第 2 步或第 3 步,所以我不知道那里的龙,但是主要问题是“创建一个 venv”步骤。由于 venv 不可“重定位”并且 RPM 使用 RPM_BUILD_ROOT,它是我们打包的 tmpdir 中的一个自包含文件系统,因此我无法将 venv 安装到 rpm_build_root 中。我必须将 venv 安装到我们部署(安装 rpm)时将要位于的构建服务器上的实际位置。由于您可能会猜测的很多原因(与其他应用程序冲突,在构建服务器上运行的其他东西等),这并不理想。

    我不想在我的生产盒上运行 setup.py 并在安装时下载软件包。我想确保一切顺利,在部署之前下载并打包所有内容。

    我找到的最接近的东西是 dh-virtualenv从这里 so question .这看起来很有希望,据我所知,它直接安装到最终目录中(不是临时构建)。它会自行清理,但似乎仍然是不好的做法。有没有更好的办法?我错过了什么吗?似乎我坚持以 Spotify 的方式做这件事。

    最佳答案

    我不知道是什么最好的方式,但您的想法与我们在公司所做的非常接近:

  • 创建一个相对的 virtualenv(可以重新定位并且仍然可以使用)。我已在此 gist 中公开脚本
  • 然后打包整个virtualenv,同时更改脚本的shebang,以便使用正确的virtualenv 调用它们。

  • 我们的规范文件中会有这样的内容:
    %build
    create-relative-virtualenv -p . -v 3.6 -r Pipfile

    %install
    # Create directories
    install -d -m 0755 "${RPM_BUILD_ROOT}/usr/lib/application"

    cp -r virtualenv ${RPM_BUILD_ROOT}/usr/lib/application/
    cp script.py ${RPM_BUILD_ROOT}/usr/lib/application/
    # set the correct shebang for script
    sed -i "1s@.*@#\!/usr/lib/application/virtualenv/bin/python3@" ${RPM_BUILD_ROOT}/usr/lib/application/script.py
    ln -s /usr/lib/application/script.py ${RPM_BUILD_ROOT}/usr/bin/script

    %check
    ./virtualenv/bin/python3 -m coverage run --branch tests/run_tests.py

    %files
    /usr/lib/application
    /usr/bin/script

    这里的好细节是测试使用打包的相同 virtualenv 运行。

    关于rpm - 使用 venv 和 rpm 在内部部署 python 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58088468/

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