[英]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 ,这样:
对于“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.