Python主版本升级后,自动将软件包重新安装到虚拟环境中
我的磁盘上有几个虚拟环境(几十个),它们是由Python3.6的Python主版本升级后,自动将软件包重新安装到虚拟环境中,python,python-3.x,python-venv,Python,Python 3.x,Python Venv,我的磁盘上有几个虚拟环境(几十个),它们是由Python3.6的venv模块创建的。现在我匆忙升级到了Ubuntu19.10,直到后来我才注意到,从公认的来源来看,Ubuntu19.10根本没有3.6版本。通过在我的主目录下定位bin/python3并在包含的文件夹上运行python3.7-mvenv--upgrade,我成功地升级了这些虚拟环境的Python版本 现在,虽然python3.7-mvenv--upgrade在虚拟环境中升级了Python,但在lib/python3.7/site-
venv
模块创建的。现在我匆忙升级到了Ubuntu19.10,直到后来我才注意到,从公认的来源来看,Ubuntu19.10根本没有3.6版本。通过在我的主目录下定位bin/python3
并在包含的文件夹上运行python3.7-mvenv--upgrade
,我成功地升级了这些虚拟环境的Python版本
现在,虽然python3.7-mvenv--upgrade
在虚拟环境中升级了Python,但在lib/python3.7/site-packages
中的venv
下重新安装我以前的包版本并没有任何作用。我想我可以通过安装Python3.6,pip freeze
从venv
下载需求,然后将venv升级到Python3.7,pip install-r
ing来实现这一点,只要我的新操作系统上有Python3.6安装
有没有其他方法可以以一种相当自动化的方式(可能主要是使用旧的
lib/python3.6
目录的pip冻结
)实现这一点,而无需我从源代码安装Python 3.6,使用conda或从一些随机PPA安装3.6?我想整体升级所有环境,以便将来当我需要使用随机环境时,它将继续使用Python 3.7。在新的3.7版本中,您应该拥有可用的pkg\u资源-setuptools
在创建时自动安装。如果没有,只需pip安装setuptools
setuptools
library代码实际上就是pip
所销售的,以使pip冻结
工作。但是你可以手动冻结它
# 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
runtime
请注意,此方法可能不是100%万无一失的,因为项目可以通过在其分发元数据中使用环境标记来声明python3.6和python3.7的独立依赖关系树(请参阅)。3.6站点中安装的项目也可能根本不支持3.7。然而,在3.6和3.7之间的小版本中,很少看到这样的情况,因此在实践中仅使用工作集应该是“足够好了”。在这种情况下,“足够好了”就足够了。批量工作完成后,在这里和那里更新奇数模块没有问题。