gpt4 book ai didi

python - Python 主要版本升级后自动将包重新安装到虚拟环境中

转载 作者:行者123 更新时间:2023-12-03 15:40:09 29 4
gpt4 key购买 nike

我的磁盘上有几个虚拟环境(数十个),由 venv 创建。 Python 3.6 的模块。现在我匆忙升级到 Ubuntu 19.10,然后才注意到来自公认来源的 Ubuntu 19.10 根本没有 3.6。我设法通过定位 bin/python3 升级了这些虚拟环境的 Python 版本。在我的主目录下运行 python3.7 -mvenv --upgrade在包含的文件夹上。

现在,虽然 python3.7 -mvenv --upgrade在虚拟环境中升级 Python,它不会在 lib/python3.7/site-packages 中重新安装我以前的软件包版本。在那之下venv .我想我可以通过安装 Python 3.6 来做到这一点,pip freeze满足 venv 的要求然后将 venv 升级到 Python 3.7,pip install -r ing - 如果只有 Python 3.6 安装可用于我的新操作系统。

有没有其他方法可以以相当自动化的方式(可能主要是 pip freeze 使用旧的 lib/python3.6 目录)执行此操作,而我不必从源代码安装 Python 3.6,使用 conda 或从一些随机 PPA 安装 3.6?我想整体升级所有环境,以便将来当我需要对随机环境做某事时,它将继续使用 Python 3.7。

最佳答案

在您的新 3.7 venv 中,您应该有 pkg_resources可用 - setuptools创建时会自动安装。如果没有,只需 pip install setuptools .
setuptools库代码实际上是pip正在出售 pip freeze工作。但是你可以手动卡住它。

# in 3.7 runtime...
import pkg_resources
old_site_dir = ".venv/lib/python3.6/site-packages/"
working_set = pkg_resources.WorkingSet([old_site_dir])
for dist in working_set:
print(dist.as_requirement())

您可以将该输出放入 requirements.txt文件并且可能有一个可用的重建站点,没有 python3.6需要运行时。

请注意,此方法可能不是 100% 万无一失的,因为项目可以通过在其分发元数据中使用环境标记来为 python3.6 和 python3.7 声明单独的依赖树(参见 PEP 508)。您的 3.6 站点中安装的项目也可能根本不支持 3.7。然而,在 3.6 和 3.7 之间的小版本中出现这种情况是非常罕见的,因此在实践中仅使用工作集应该“足够好”。

关于python - Python 主要版本升级后自动将包重新安装到虚拟环境中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59859095/

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