繁体   English   中英

从另一个virtualenv创建virtualenv

[英]Create a virtualenv from another virtualenv

我们可以从现有的virtualenv创建virtualenv以继承已安装的库吗?

详细地:

我首先创建一个“引用”virtualenv,并添加库(修复版本):

virtualenv ref
source ref/bin/activate
pip install -U pip==8.1.1     # <- I want to fix the version number
pip install -U wheel==0.29.0  # <- I want to fix the version number

然后:

virtualenv -p ref/bin/python myapp
source myapp/bin/activate
pip list

我明白了:

pip (1.4.1)
setuptools (0.9.8)
wsgiref (0.1.2)

如何获取我安装的库?

类似的问题

我看到了一个类似的问题: virtualenv可以继承另一个吗?

但我想要一个孤立的virtualenv,它不使用引用的virtualenv,除了库安装。 因此,将指定的目录添加到当前活动的virtualenv的Python路径中,不是解决方案。

为什么这样做?

好吧,我们有一个集成服务器来构建应用程序(用于发布和持续集成),我们希望保持对库版本的控制并使构建更快。

创建一个可重定位的virtualenv

我想我可以使用可重定位的virtualenv ,这样:

  1. 创建ref virtualenv
  2. 让它可重新定位:``virtualenv --relocatable ref```

对于“myapp”:

  • ref复制到myapp

您如何看待这个解决方案? 对于可分发的版本是否可靠?

您可以使用.pth文件解决问题。 基本上你这样做:

virtualenv -p ref/bin/python myapp
realpath ref/lib/python3.6/site-packages > myapp/lib/python3.6/site-packages/base_venv.pth

执行此操作并激活myapp ,如果运行pip list ,则应该看到ref所有包。 请注意, myapp安装的任何软件包都会隐藏ref的相应软件包。

当你安装第二个virtualenv时,你必须添加--system-site-packages标志。

virtualenv -p ref/bin/python myapp --system-site-packages

您可以从一个环境freeze包列表:

(ref) user@host:~/dir$ pip freeze > ref-packages.txt

然后安装它们:

(use) user@host:~/dir$ pip install -r ref-packages.txt

pip版本1.4.1与旧版virtualenv捆绑在一起。 例如Ubuntu 14.04附带的那个。 您应该从系统中删除它并安装最新版本的virtualenv

pip install virtualenv

这可能需要root权限( sudo )。

然后在虚拟env pip install -U pip pip内升级pip或重新创建env。

我认为你的问题可以用不同的方式解决。 使用PYTHONPATH 首先,我们创建ref virtaulenv并在此处安装所有需要的包

$ virtualenv ref
$ source ref/bin/activate
$ pip install pep8
$ pip list
> pep8 (1.7.0)
> pip (8.1.2)
> setuptools (26.1.1)
> wheel (0.29.0)

然后我们创建第二个virtaulenv use

$ virtualenv use
$ source use/bin/activate
$ pip list
> pip (8.1.2)
> setuptools (26.1.1)
> wheel (0.29.0)

现在我们可以在这个环境中设置我们的PYTHONPATH以包含ref的目录

$ export PYTHONPATH=PYTHONPATH:/home/path_to/ref/lib/python2.7/site-packages:/home/path_to/ref/local/lib/python2.7/site-packages
$ pip list
> pep8 (1.7.0)
> pip (8.1.2)
> setuptools (26.1.1)
> wheel (0.29.0)

正如您所看到的那样,您只需在ref的环境中引用已安装的软件包。 另请注意,我们在末尾添加此文件夹,因此它们的优先级较低。

注意 :这不是PYTHONPATH中存在的所有文件夹。 我把它包括在内,因为它们是主要的。 但是如果你有一些问题也可以添加其他问题,只需用这种方法查找所需的路径如何打印PYTHONPATH的内容

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM