python - 更新后如何让 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%
- 这是使用
pip
v21.1.1 - 该版本目前是 beta 版本,这也是我使用的部分原因
my-package==%VERSION%
(因为pip
默认情况下不使用开发版本)。我尝试添加--pre
标志;使用版本说明符这没有什么区别(它在第一次尝试时仍然找不到最新版本),没有版本说明符它只是安装以前的最新预发行版。 poetry publish
我目前在步骤提示时在终端中手动输入我的密码。
解决方案
推荐阅读
- arcore - 如何在前置摄像头中调整 ARCore 光线估计
- java - 如何使用包含数据库的 Rest Api 设计图书馆应用程序
- google-drive-api - 可恢复上传返回 null 并拒绝设置不安全的标头“content-length”
- python - 在 python 中为 fgplvm 导入或安装 ndlml
- c# - 我可以在 C# 中创建一个使用字典(应用于所有数据类型)作为参数的方法吗?
- websphere - Websphere 中 IBMIHS 中的 HTTP 到 HTTPS
- reactjs - 在 css-modules 中重建后类的名称会改变吗?
- java - 当 HashMap 值第一次出现时,我如何“打破”?
- php - 在视图文件上从数据库更改日期格式
- php - 如何计算一列的行数并使用 if 条件计算小于 2 行以在 laravel 中运行特定代码