如何在 Python 中重命名 Virtual alenv?

在初始化 virtualenv时,我拼错了 virtualenv的名称:

$ virtualenv vnev

我实际上打算创建名为 venv的环境。 在尝试将 vnev文件夹重命名为 venv之后,我发现这并没有提供多少帮助。激活环境的名称仍然重命名旧的 vnev

$ mv vnev venv
$ . venv/bin/activate
(vnev) $ deactivate

我想知道如何去重新命名环境?

89355 次浏览

默认情况下,viralenv 不支持重命名环境。更安全的做法是删除 viralenv 目录并创建一个具有正确名称的新目录。你可以这样做:

  1. 激活你的 Virtual alenv: source vnev/bin/activate
  2. 为当前安装的软件包创建 requments.txt: pip freeze > requirements.txt
  3. 删除拼写错误的 viralenv: rm -r vnev/
  4. 使用正确的名称创建一个新的 viralenv: virtualenv venv
  5. Activate new virtualenv: source venv/bin/activate
  6. 从 requments.txt: pip install -r requirements.txt安装包

如果重新创建不是一个选项,有像 Virtualenv-mv这样的第三方工具可能会有所帮助。

或者,您可以使用提供 cpvirtualenv命令的 虚拟包装器来复制或重命名 viralenvs。

如果你使用 虚拟包装器,这可以通过:

$ cpvirtualenv <wrong_name> <correct_name>
$ rmvirtualenv <wrong_name>

另外,要重命名 conda 虚拟环境,请查看 这个问题

我的答案类似于使用旧的依赖关系创建一个新的虚拟环境,但是这个答案很简洁。

  1. 使用 conda 将旧环境(比如 venv _ 1)克隆到新环境(比如 venv _ 2)。

    Conda create-n venv _ 2—— clone venv _ 1

这将创建一个克隆 venv _ 1的新环境 venv _ 2。因此没有获取包/依赖项的单独任务。一步就够了。

  1. 删除旧的虚拟环境

    Rm-rf“旧虚拟环境的完全限定路径”

所以只需要半个步骤就可以完成任务。

windows中,我可以通过在 scripts\中编辑 activate.bat来轻松地重命名我的虚拟环境:

  1. 备份原来的 activate.bat(我复制粘贴,然后重新命名我的 BACKUP_activate.bat)。

  2. 右击并编辑 activate.bat

  3. Change VIRTUAL_ENV variable from:

     set VIRTUAL_ENV=C:\some_dir\old_venv_name
    

    进入

     set VIRTUAL_ENV=C:\some_dir\new_venv_name
    
  4. PROMPT变量从:

     set PROMPT=(old_venv_name) %PROMPT%
    

    进入

     set PROMPT=(new_venv_name) %PROMPT%
    
  5. 保存已编辑的批处理文件

注意: 我的解决方案应该工作和保存 windows users建立新的虚拟环境,我没有知识脚本或在 Linux 或其他操作系统的任何东西

cpvirtualenv from virtualenv-wrapper errored out for me trying to run virtualenv-clone, but running that directly worked fine:

virtualenv-clone ~/.virtualenvs/oldname ~/.virtualenvs/newname
workon newname
rmvirtualenv oldname

不需要重新安装任何东西。

我用来重命名虚拟环境的步骤:

  1. 将整个虚拟环境文件夹复制到新的虚拟环境中。
cp -a old_venv new_venv
  1. 使用 new_venv/bin文件夹中的 sed直接更改对 old_v.env的引用
cd new_venv/bin
sed -i 's/old_venv/new_venv/g' *
  1. 删除旧的虚拟环境
rm -rf old_env

可能需要重新安装 jupyter 的 ipykernel,但是除此之外,一切似乎都很正常