针对Python 3.3+(使用新的venv
内置模块)
简短回答(不考虑版本):
- 没有干净、直接的方法来移动虚拟环境
- 只需重新创建,很容易!!
长答案:
从Python v3.3开始,virtualenv
包已成为名为venv
的内置模块。
其他回答中提到的--relocatable
选项未包含在venv
中,目前我所知道的没有好的、安全的方法来重命名或重新定位Python虚拟环境。
但是,重新创建一个虚拟环境并安装所有当前安装的软件包是相当简单的。请参见此答案,或参见下面的部分。在此过程中,您可以在任何位置以任何名称重新创建新环境。
在上面链接的答案中,他提到了一些第三方软件包,这些软件包可能支持直接重命名或移动。如果您决定寻求一种移动虚拟环境的方法,您可以看看这些软件包是否也适用于venv
。
注意:在那个答案中,重点是virtualenv
,而不是venv
。请参见下一节以了解如何翻译。
venv
与旧版virtualenv
命令语法的区别
使用venv
的命令是:
python -m venv
与其只安装为原始包中的命令的virtualenv
不同。其中“python”是指您运行Python可执行文件的方式,可能是各种各样的内容,例如:
python
py
或py -3.7
或类似内容(适用于Python 3.3+的Windows Python Launcher和捆绑在Windows上的Python,或可单独安装于Linux [和MacOS?]的py
包)
python3
(Linux环境中双重安装Python 2和3的惯例)
- 如果出现问题,请使用要运行的Python可执行文件的绝对路径:例如:
c:\program files\python37\python.exe
如果不确定正在运行哪个版本,可以始终使用python --version
查找。
如何重新创建虚拟环境
创建/重新创建虚拟环境很容易,只要你用它们工作一段时间后就会变得轻松自然。这个过程反映了你在第一阶段将脚本(及其依赖项)分发为包时所做的操作,以及其他人用于安装你的脚本/包进行进一步开发时所做的操作。
首先,获取虚拟环境中存在的内容的更新列表。激活虚拟环境后,获取它使用的Python版本,并将依赖项列表保存到文件中。
使用激活的虚拟环境和命令python --version
查看它正在使用的Python版本。
- 这是为了明确 - 你可能想出于各种原因更新Python版本 - 至少更新到最新的修补程序版本
- 例如,如果现有的虚拟环境使用的是Python v3.7.4,但现在v3.7.6已经发布 - 使用v3.7.6代替,这应该只包含非破坏性的安全和错误修复。
使用命令python -m pip freeze > requirements.txt
创建当前软件包依赖项列表,并将其放入requirements.txt
文件中。此命令在Linux或Git Bash中有效,但不确定在Windows的Powershell或命令行中是否有效。
现在创建一个新的虚拟环境,然后添加旧环境中的依赖项。
创建新的 venv。
- 确保你使用的是要安装到 venv 的正确版本的 python。
- 如果你想要完全相同的 Python 版本:
- 在旧的 venv 中,输入 "python --version",然后确保你使用该版本的 python 命令创建新的 venv。
- 对于命令中的新 venv 文件夹条目:
- 要么添加一个绝对或相对路径到所需的最终文件夹位置。
- 使用
python -m venv my_new_venv
在当前工作目录中的新 my_new_venv
文件夹中创建一个新的虚拟环境。
- venv 文件夹的名称将是 venv 的名称(在激活时显示在提示符中)。
从 requirements.txt
文件安装依赖项。
python -m pip install -r requirements.txt
你可能需要重新安装开发模式下的本地软件包。
注意,如果你需要查看软件包安装的具体位置,请使用:
python -m pip list -v
- “-v” 或 “verbose” 选项将添加一些关于每个安装的软件包的额外信息,包括它安装在哪个路径下。这对于确保你区分虚拟、用户和系统安装的软件包非常有用。
此时,您只需删除旧的 venv 文件夹和所有内容即可。我建议使用图形用户界面进行操作 - 从 Linux 命令行中进行文件删除通常是永久性的,而一个小错误可能会带来坏消息。
virtualenv ./my-python-venv
),这是具有误导性的,因为它暗示它可能是“可移植”的。将此目标限制为绝对路径将强化这样一个观念:virtualenv
目录不能/不应该被移动。 - colm.anseo