首页 > 解决方案 > 更新后如何让 pip 可靠地安装软件包?

问题描述

概括

似乎需要两次点击pip才能找到要安装的软件包的新更新版本。我希望能够在第一次尝试时可靠地安装它。

细节

我一直在尝试自动化我使用批处理脚本维护的 Python 包的发布过程。我的工作流程是将其发布到 TestPyPI,然后从那里将其安装到一个干净的虚拟环境中并针对它运行测试套件的副本(测试未与 dist 捆绑在一起;我从开发项目中将它们复制到本地目录)。

但是,脚本在安装步骤中失败,因为pip找不到指定的版本:

ERROR: Could not find a version that satisfies the requirement my-package==<version>

我猜这可能是因为我在更新后尝试安装太快,也许更新需要几秒钟才能渗透到相关位置。所以我添加了 10 秒超时,然后添加了 30 秒超时,但遇到了同样的问题。尽管如此,在脚本退出后手动尝试立即起作用。

因为它似乎总是在第二次命中,所以我在脚本中添加了安装命令的第二个副本(紧接着,在任何地方都没有超时),如果它在第一个出现错误时停止它退出。这现在可以可靠地工作,因为它总是第一次失败但第二次成功。

我可以模糊地推测,也许第二次命中会迫使它清除一些缓存或类似的东西,但我真的不知道这个魔法是如何工作的!

问题

我想有一种方法可以让安装可靠地工作,而不需要这个虚拟的第一个命令。这可能吗?

其他详情

批处理脚本的最小化版本是:

poetry build
poetry run twine check dist/my-package-%VERSION%*
poetry publish -r test-pypi -u my-user

mkdir %TESTDIR%
cd %TESTDIR%
python -m venv venv
call venv\Scripts\activate
python -m pip install --upgrade pip

call python -m pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ my-package==%VERSION%
call python -m pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ my-package==%VERSION%

标签: pythonpippypipython-packaging

解决方案


推荐阅读