如何从以前的 Python 版本升级虚拟环境?
How to upgrade virtual environment from previous Python version?
我将系统上的 Python 从 Python 3.5 升级到 3.6,现在我在 Python 3.5 中创建的所有 virtualenvs 都不再可用。当我只安装了 Python 3.6 时,如何获取安装在 Python 3.5 virtualenv 中的软件包列表?我需要使用与旧 Python 3.5 virtualenv.
相同的软件包设置新的 Python 3.6 virtualenv
我知道我可以查看 lib/python3.5/site-packages
目录并手动创建列表,但我更喜欢 运行ning 的自动方式,例如pip freeze
针对旧的虚拟环境。我不想重新安装旧版本的 Python。
我试过 python -m venv --upgrade
命令,它有帮助文本 "Upgrade the environment directory to use this version of Python, assuming Python has been upgraded in-place."。然而,这实际上并没有在 virtualenv 中重新安装包,它只是创建了一个名为 lib/python3.6/site-packages
的基本为空的目录。此外,我不得不删除 venv 中损坏的符号链接 bin/python3.5
,以便甚至 运行 python -m venv --upgrade
对抗旧的 virtualenv。
似乎很容易让 virtualenv 陷入无法升级的境地。您可能可以手动修复 venv,但我认为重新开始最简单。
简述:
- 创建一个新的虚拟环境
- 将旧 venv 中不属于 venv 环境的目录复制到其中。
- 旧环境:
ls -1 lib/python3.5/site-packages > requirements.txt
,然后手工清理
- 新环境
pip install -r requirements.txt
查看这个相关问题:
Update a Python virtualenv?
使用 pkg_resources.find_on_path()
使用与 pip freeze
相同的逻辑查找包。即使 virtualenv 适用于 Python:
的旧版本,这仍然有效
rav@novascotia:~/venvs$ python
Python 3.6.1 (default, Mar 27 2017, 00:27:06)
[GCC 6.3.1 20170306] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pkg_resources
>>> entries = pkg_resources.find_on_path(None, './st-courses-3.5/lib/python3.5/site-packages')
>>> print('pip install \\n%s' % ' \\n'.join('%s==%s' % (o.project_name, o.version) for o in entries))
pip install \
websockets==3.2 \
webencodings==0.5 \
wcwidth==0.1.7 \
...
这是从 pip freeze
到 find_on_path
的代码轨迹:
我将系统上的 Python 从 Python 3.5 升级到 3.6,现在我在 Python 3.5 中创建的所有 virtualenvs 都不再可用。当我只安装了 Python 3.6 时,如何获取安装在 Python 3.5 virtualenv 中的软件包列表?我需要使用与旧 Python 3.5 virtualenv.
相同的软件包设置新的 Python 3.6 virtualenv我知道我可以查看 lib/python3.5/site-packages
目录并手动创建列表,但我更喜欢 运行ning 的自动方式,例如pip freeze
针对旧的虚拟环境。我不想重新安装旧版本的 Python。
我试过 python -m venv --upgrade
命令,它有帮助文本 "Upgrade the environment directory to use this version of Python, assuming Python has been upgraded in-place."。然而,这实际上并没有在 virtualenv 中重新安装包,它只是创建了一个名为 lib/python3.6/site-packages
的基本为空的目录。此外,我不得不删除 venv 中损坏的符号链接 bin/python3.5
,以便甚至 运行 python -m venv --upgrade
对抗旧的 virtualenv。
似乎很容易让 virtualenv 陷入无法升级的境地。您可能可以手动修复 venv,但我认为重新开始最简单。
简述:
- 创建一个新的虚拟环境
- 将旧 venv 中不属于 venv 环境的目录复制到其中。
- 旧环境:
ls -1 lib/python3.5/site-packages > requirements.txt
,然后手工清理 - 新环境
pip install -r requirements.txt
查看这个相关问题: Update a Python virtualenv?
使用 pkg_resources.find_on_path()
使用与 pip freeze
相同的逻辑查找包。即使 virtualenv 适用于 Python:
rav@novascotia:~/venvs$ python
Python 3.6.1 (default, Mar 27 2017, 00:27:06)
[GCC 6.3.1 20170306] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pkg_resources
>>> entries = pkg_resources.find_on_path(None, './st-courses-3.5/lib/python3.5/site-packages')
>>> print('pip install \\n%s' % ' \\n'.join('%s==%s' % (o.project_name, o.version) for o in entries))
pip install \
websockets==3.2 \
webencodings==0.5 \
wcwidth==0.1.7 \
...
这是从 pip freeze
到 find_on_path
的代码轨迹: