当前位置: 首页>>技术问答>>正文


重命名virtualenv文件夹而不会破坏它

, , ,

问题描述

我已经创建了文件夹并在其中初始化了virtualenv实例。

$ mkdir myproject
$ cd myproject
$ virtualenv env

当我运行(env)$ pip freeze时,它会显示已安装的软件包。

现在我想将myproject/重命名为project/

$ mv myproject/ project/

但是,现在我跑的时候

$ . env/bin/activate
(env)$ pip freeze

它说pip没有安装。如何在不破坏环境的情况下重命名项目文件夹?

最佳解决思路

您需要调整安装以使用相对路径。 virtualenv为此提供了--relocatable选项。来自the docs

Normally environments are tied to a specific path. That means that you cannot move an environment around or copy it to another computer. You can fix up an environment to make it relocatable with the command:

$ virtualenv –relocatable ENV

NOTE: ENV is the name of the virtual environment and you must run this from outside the ENV directory.

This will make some of the files created by setuptools or distribute use relative paths, and will change all the scripts to use activate_this.py instead of using the location of the Python interpreter to select the environment.

Note: you must run this after you’ve installed any packages into the environment. If you make an environment relocatable, then install a new package, you must run virtualenv –relocatable again.

次佳解决思路

我相信”knowing why”比”knowing how”更重要。所以,这是解决这个问题的另一种方法。

当您运行. env/bin/activate时,它实际执行以下命令(例如,使用/tmp):

VIRTUAL_ENV="/tmp/myproject/env"
export VIRTUAL_ENV

但是,您刚刚将myproject重命名为project,因此该命令无法执行。这就是为什么说pip is not installed,因为你没有在系统中的全球环境安装pip和你的virtualenv pip没有正确来源。

如果要手动修复此问题,可以采用以下方法:

  1. 使用您喜欢的编辑器如Vim,通常在第42行修改/tmp/project/env/bin/activateVIRTUAL_ENV='/tmp/myproject/env' => VIRTUAL_ENV='/tmp/project/env'

  2. 修改第1行中的/tmp/project/env/bin/pip#!/tmp/myproject/env/bin/python => #!/tmp/project/env/bin/python

之后,再次激活您的虚拟环境env,您将看到您的pip再次返回。

第三种解决思路

注意:作为@jb。指出,此解决方案仅适用于轻松(重新)创建的virtualenv。如果环境需要几个小时才能安装,则不建议使用此解决方案


Virtualenvs很棒,因为它们易于制作和转换;它们使您无法锁定单一配置。如果您了解项目要求,或者可以获得它们,请创建一个新的virtualenv

  • 创建requirements.txt文件(env)$ pip freeze > requirements.txt

    • 如果无法创建requirements.txt文件,请在删除原始env之前检查env/lib/pythonX.X/site-packages

  • 删除现有的(env) deactivate && rm -rf env

  • 创建一个新的virtualenv,激活它,并安装要求virtualenv env && . env/bin/activate && pip install -r requirements.txt


或者,使用virtualenvwrapper使事情变得更容易,因为所有的virtualenvs都保存在一个集中的位置

$(old-venv) pip freeze > temp-reqs.txt
$(old-venv) deactivate
$ mkvirtualenv new-venv
$(new-venv) pip install -r temp-reqs.txt
$(new-venv) rmvirtualenv old-venv

第四种思路

我总是安装virtualenvwrapper来帮忙。从shell提示符:

pip install virtualenvwrapper

virtualenvwrapper文档中记录了一种方法 – cpvirtualenv这就是你要做的。确保您不在环境中并返回shell提示符。使用所需名称键入:

cpvirtualenv oldenv newenv

然后,如有必要:

rmvirtualenv oldenv

要去你的新人:

workon newenv

第五种思路

您可以按照以下步骤解决问题:

  1. 重命名您的目录

  2. 重新运行:$ virtualenv ..\path\renamed_directory

  3. virtualenv将纠正目录关联,同时保留您的包

  4. $ scripts/activate

  5. $ pip freeze验证您的包裹是否到位

  6. 一个重要的警告,如果你的virtualenv目录中的脚本文件中有任何静态路径依赖,你将不得不手动更改它们。

第六种思路

virtualenv-clone:另一种方法,它可以帮助我很多次没有问题。

pip install virtualenv-clone
virtualenv-clone old-dir/env new-dir/env

第七种思路

(项目文件夹内)

cd bin
sed -i 's/old_dir_name/new_dir_name/g' *

不要忘记停用并激活

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/6330.html,未经允许,请勿转载。