python - 如何检查所有包是否满足版本要求?
问题描述
在 Python 解释器中运行脚本时,我想检查是否使用以下版本:
absl-py==0.1.10
agate==1.6.0
agate-dbf==0.2.0
agate-excel==0.2.1
agate-sql==0.5.2
appnope==0.1.0
例如,我可以这样做:
if absl-py.__version__ != "0.1.10":
logging.error("update to version == 0.1.10")
sys.exit() #
并重复所有其他包。有没有办法遍历所有指定的包并在不满足条件时引发和出错?
解决方案
您可以使用以下代码检查包是否存在(确保先创建requirements.txt
):
with open("requirements.txt") as f:
packages = f.read().split("\n")
for package in packages:
package_name, package_version = package.split("==")
package_name = "_".join(package_name.split("-"))
exec(f"""\
try:
import {package_name}
except ImportError:
print("{package_name} doesn't exist")
else:
if not {package_name}.__version__== '{package_version}':
print(f"{package_name} is not up to date")""")
推荐阅读
- bash - Bash:使用 xargs 复制文件。为什么我把它作为 xargs 的最后一个参数返回?
- php - Laravel Eager 加载 with() 函数返回空数组
- python - 如何在opencv中正确选择板子的轮廓?
- java - Android 移动网络套接字实现 使用额外数据写入
- javascript - 等到 jsp:include 被加载
- c - 在 C 中检查数组的索引 [0] 时忽略语句
- javascript - 通过事务操作将firebase中的通知字段“seen”布尔值更改为true
- sql - PostgreSQL:所有文本列中的 ILIKE
- python - 将 Random.Choice 放在哪里,以便每次都重新运行,但所有代码都可以访问?(基维/蟒蛇)
- crystal-reports - Crystal Reports:如何在生效日期后从字段中获取以前的记录?请看例子