在没有 pip install 的情况下在本地创建 virtualenv 的副本

Sau*_*mar 15 python virtualenv pip copy

有时需要创建一个退出virtualenv的副本来测试我们项目的额外功能。

在这种情况下,我们需要创建现有环境的副本并添加更多要求。

下面提到了创建现有 virtualenv 副本的一种方法:

# while using existing virtualenv
(oldenv): pip freeze > requirements.txt

# after creating and logged-in to new virtualenv
(newenv): pip install -r requirements.txt

# where requirements.txt is the same file created using (oldenv)
Run Code Online (Sandbox Code Playgroud)

但我个人并不喜欢这种方式。为什么??因为安装了我们可以重用的相同软件包。重复使用或说复制不仅会减少额外的时间和精力,还会将互联网带宽的使用减少到零,特别是对于有限和缓慢的互联网用户。

凉爽的!那么在本地创建现有virtualenv副本的其他方法是什么?

我知道我在下面提到的另外两种方式。希望这些会有所帮助。

Sau*_*mar 23

创建现有 virtualenv 副本的第一种方法,例如ProjectAenv

  1. 将 ProjectAenv 复制到其他名称或目录:

    cp -R /home/sk/Path1/ProjectAenv /home/sk/Path2/ProjectBenv
    
    Run Code Online (Sandbox Code Playgroud)

    /home/sk/Path1/ProjectAenvvirtualenv ProjectAenv的绝对路径在哪里

  2. 然后使用您喜欢的编辑器打开activate新复制的ProjectBenv文件:

    gedit /home/sk/Path2/ProjectBenv/bin/activate
    
    Run Code Online (Sandbox Code Playgroud)
  3. 找到行VIRTUAL_ENV="/home/sk/Path1/ProjectAenv"并将其替换为:

    VIRTUAL_ENV="/home/sk/Path2/ProjectBenv"
    
    Run Code Online (Sandbox Code Playgroud)

    保存并关闭文件。

就是这样!!您的新环境ProjectBenvProjectAenv复制并准备使用。我使用这种方式已经很长时间了,但从未遇到任何问题,尽管我推荐第二种复制方式。

创建现有 virtualenv(推荐) 副本的第二种方法

  1. 下载virtualenv-clone

    wget https://pypi.python.org/packages/source/v/virtualenv-clone/virtualenv-clone-0.2.6.tar.gz
    tar -zxvf virtualenv-clone-0.2.6.tar.gz
    cd virtualenv-clone-0.2.6
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在任何 virtualenv 环境中安装virtualenv-clone

    virtualenv newenv            # create a new environment. You can use any existing one.
    source newenv/bin/activate   # login to newenv
    (newenv): python setup.py install  # install virtualenv-clone in newenv
    # be sure that you are inside the directory "virtualenv-clone-0.2.6"
    
    Run Code Online (Sandbox Code Playgroud)

    virtualenv-clone 将安装在 newenv 中。

  3. 现在,以 newenv 身份登录时,我们可以创建任何现有环境的副本。例如创建 ProjectAenv 的副本:

    (newenv): virtualenv-clone ProjectAenv ProjectBenv 
    (newenv): deactivate             # to come out from newenv.
    
    Run Code Online (Sandbox Code Playgroud)

请评论任何建议或更改。

  • 第一种方法不好。在这种方法中,您只是更改了虚拟环境的位置。但是`pip` 命令有一个在构建时使用python 位置的shebang。因此,如果您像方法 1 一样进行复制,您将无法运行 `pip`。出于同样的原因,您在 `bin` 文件夹中的其他 shell 脚本将无法正常工作。 (6认同)