我们可以从现有的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
Run Code Online (Sandbox Code Playgroud)
然后:
virtualenv -p ref/bin/python myapp
source myapp/bin/activate
pip list
Run Code Online (Sandbox Code Playgroud)
我明白了:
pip (1.4.1)
setuptools (0.9.8)
wsgiref (0.1.2)
Run Code Online (Sandbox Code Playgroud)
如何获取我安装的库?
类似的问题
我看到了一个类似的问题: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
Run Code Online (Sandbox Code Playgroud)
执行此操作并激活后myapp,如果您运行,pip list您应该也可以看到所有包ref.请注意,安装的任何软件包myapp都会隐藏相应的软件包ref.
当您安装第二个 virtualenv 时,您必须添加--system-site-packages标志。
virtualenv -p ref/bin/python myapp --system-site-packages
Run Code Online (Sandbox Code Playgroud)