在不中断i的情况下重命名virtualenv文件夹

2024-05-13 19:54:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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

$ mkdir myproject
$ cd myproject
$ virtualenv env

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

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

$ mv myproject/ project/

但是,现在当我跑

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

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


Tags: pip实例envproject文件夹bin环境virtualenv
3条回答

我相信“知道为什么”比“知道如何”更重要。所以,这里有另一种方法来解决这个问题。

运行. 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/activate

    VIRTUAL_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。指出,此解决方案仅适用于轻松(重新)创建的virtualenvs。如果环境需要几个小时来安装此解决方案,则不建议


virtualenv很好,因为它们很容易制作和切换;它们可以防止您被锁定到单个配置中。如果您知道项目需求,或者可以获得它们,请创建一个新的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使事情变得简单一些,因为所有virtualenv都保存在一个集中的位置

$(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

您需要调整安装以使用相对路径。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.

相关问题 更多 >