禁用ipython自动加载虚拟环境

2024-05-19 20:54:33 发布

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

我有两个不同的python虚拟环境系统,一个是anaconda,另一个是virtualenv。(我需要保留两者以适应不同的开发环境)。你知道吗

我为每个虚拟环境安装了单独的ipython。问题是ipython似乎是虚拟环境感知的,它将自动从$VIRTUAL_ENV加载lib。你知道吗

例如,下面是我的两个不同的虚拟环境

  1. venv,由virtualenvvirtualenv /home/<user>/venv创建。 我通过在.bashrc中添加export VIRTUAL_ENV='/home/shao/venv'来设置$VIRTUAL_ENV。我还通过pip在这个环境中安装了一些必需的包
  2. p2,由anacondaconda create -n p2 python=2创建。你知道吗

激活p2后的$PATH是:

(p2) shao@T420s:~$ echo $PATH
/home/shao/anaconda3/envs/p2/bin:/home/shao/anaconda3/bin:/home...

我肯定ipythonbinaray在/home/shao/anaconda3/envs/p2/bin。你知道吗

但是,p2的ipythonsys.path是:

(p2) shao@T420s:~$ ipython
/home/shao/anaconda3/envs/p2/lib/python2.7/site-packages/IPython/core/interactiveshell.py:724: UserWarning: Attempting to work in a virtualenv. If you encounter problems, please install IPython inside the virtualenv.
  warn("Attempting to work in a virtualenv. If you encounter problems, please "
Python 2.7.12 |Continuum Analytics, Inc.| (default, Jul  2 2016, 17:42:40) 
Type "copyright", "credits" or "license" for more information.

...

In [1]: import sys
In [2]: sys.path
Out[2]: 
['/home/shao/venv/lib/python2.7/site-packages/pandas-0.18.1-py2.7-linux-x86_64.egg',
 '/home/shao/venv/lib/python2.7/site-packages/tika-1.13.1-py2.7.egg',
 '/home/shao/venv/lib/python2.7/site-packages/superlance-0.11-py2.7.egg',
 '/home/shao/venv/lib/python2.7/site-packages/pytz-2016.6.1-py2.7.egg',
 ...
 '/home/shao/venv,
 '/home/shao/anaconda3/envs/p2/bin',
 '/home/shao/anaconda3/envs/p2/lib/python27.zip',
 ...
 '/home/shao/.ipython']

如您所见,ipython解释器向我发出警告,sys.path包含来自venv的lib,它们是来自p2的优先lib。你知道吗

在google搜索之后,我注意到最近的ipython版本是virtualenvironmentaware,因此它将自动从venv加载这些lib。你知道吗

我注意到两件事:

  1. p2的python解释器将不受venv的影响
  2. 如果我重置$VIRTUAL_ENVp2的ipython解释器将不受venv的影响。你知道吗

现在的问题是有没有合适的方法(keep$VIRTUAL_ENV)来禁用ipython的初始化行为,这样$VIRTUAL_ENVlibs就不会被加载了?你知道吗

谢谢。你知道吗


Tags: envhomebinvirtualenvvenvlibpackagesipython