【问题标题】:How do I use a virtualenv-based deployment method without upgrading to each and every upstream version?如何在不升级到每个上游版本的情况下使用基于 virtualenv 的部署方法?
【发布时间】:2025-12-22 14:35:12
【问题描述】:

上周五,我为我的 Django 项目构建了一个 RPM 规范。 RPM 创建一个virtualenv,通过pip 下载依赖项并将所有内容放入包中。今天,我发现 BeautifulSoup 3.2 已经发布了。幸运的是,我将 BeautifulSoup 版本固定在 requirements.txt 中,所以我发现是因为构建失败。

现在完全不同的是:我如何避免将来升级东西? BeautifulSoup 已经从 PyPI 中删除了所有以前的版本,所以我无法下载我实际测试过的版本。 pip 的下载缓存在这里也没有帮助,因为 pip 总是首先尝试检查 PyPI。

你能推荐一些东西来避免这种情况吗?

【问题讨论】:

    标签: django virtualenv backwards-compatibility pip


    【解决方案1】:

    首先,这是一种不寻常的情况。我从未见过另一个包像 BeautifulSoup 那样删除所有旧版本。我认为这是对用户相当不利的行为,除非是在严重的安全修复情况下。

    也就是说,如果您想要使用 pip 进行可靠的构建过程,您确实需要在本地镜像您依赖的所有包。做起来并不难;您可以使用 pip 的 --download 选项(或您现有的 pip 缓存)来获取所有包 tarball,然后将它们转储到索引的、网络服务的目录中,并在您的需求文件中使用 --find-links 将 pip 指向那里(加上 --no-index 告诉它不要使用 PyPI)。

    【讨论】:

    • 可能会这样做,或者可能是“本地点灯”——只是保持拉链。谢谢。
    【解决方案2】:

    仍然可以找到有问题的文件:只需提供直接 url 而不是包名:

    http://www.crummy.com/software/BeautifulSoup/download/3.x/3.0.8.tar.gz

    例如。

    【讨论】:

      最近更新 更多