在虚拟环境中安装ipython

时间:2015-06-09 18:19:19

标签: python sqlite ipython virtualenv

我在我的帐户上安装了python 3.3.6和ipython 3.0.0。我在Linux集群(RedHad4.9)上。当我启动ipython时,我收到以下消息:

WARNING: Attempting to work in a virtualenv. If you encounter problems, please install IPython inside the virtualenv.
WARNING: IPython History requires SQLite, your history will not be saved.

我不确定virtualenv是什么,以及为什么我尝试使用virtualenv。 我已经研究了一段时间,但我找不到解决方案。有人能以正确的方式暗示我吗?

3 个答案:

答案 0 :(得分:4)

由于您从源代码安装了python和iPython,这似乎是最好的解决方法: 解决此问题的一种简单方法是在非root位置安装Python,并使用pip安装iPython。它不是在本地模块中在全局模块中找到iPython,因此它假设您正在使用virtualenv。只需使用pip安装。

对于虚拟环境,它们是一个虚拟的python安装,限制对全局模块的访问,因此您可以测试自定义模块,做其他很酷的事情。例如,您可以激活和停用不同的环境。安装一个(到同一目录)后:

$ virtualenv .
$ source bin/activate

然后我正在使用virtualenv。由于找到了iPython命令,但是全局Python与安装的不同,它给了我一个警告。 https://virtualenv.pypa.io/en/latest/

通常,如果您正在运行虚拟环境,那么您的shell应该反映这一点:

没有virtualenv:

alex@alex-Gazelle-Professional:~$

使用VirtualEnv:

(no-pyside)alex@alex-Gazelle-Professional:~$

编辑:

本地和全局模块之间的差异。 Python搜索已安装模块的路径如下:

  
    
      

import sys; print sys.path          ['','/ home / alexxirtualenvs / no-pandas / lib / python2.7','/ home / alexxirtualenvs / no-pandas / lib / python2.7 / plat-x86_64-linux_gnu','/ home / alexvirtualenvs / no-pandas / lib / python2.7 / lib-tk','/ home / alexvirtualenvs / no-pandas / lib / python2.7 / lib-old','/ home / alexvirtualenvs / no-pandas / lib / python2.7 / lib-dynload','/ usr / lib / python2.7','/ usr / lib / python2.7 / plat-x86_64-linux_gnu','/ usr / lib / python2.7 / lib -tk','/ home / alexxirtualenvs / no-pandas / local / lib / python2.7 / site-package','/ home / alexxirtualenvs / no-pandas / lib / python2.7 / site -packages']

    
  

这是在虚拟环境中。看看搜索路径如何不包含/ usr / lib等。如果我停用virtualenv并全局搜索,我会得到以下信息:

>>> import sys; print sys.path
['', '/usr/local/lib/python2.7/dist-packages/h5py-2.5.0-py2.7-linux-x86_64.egg', '/usr/local/lib/python2.7/dist-packages/XlsxWriter-0.7.3-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/pyqtgraph-0.9.10-py2.7.egg', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client', '/usr/lib/python2.7/dist-packages/wx-3.0-gtk2']

在这里,除了''(当前目录)之外的所有内容都是全局安装的。

答案 1 :(得分:1)

我遇到了同样的错误,我在github得到了答案和足够的解释。

根据建议的编辑,尝试并执行以下步骤:

import os, sys, IPython
print os.environ['VIRTUAL_ENV']
print sys.executable
print IPython.__file__
print sys.path

这将打印virtualenvipython executable的路径。完成此操作后,点击head $(which ipython)hash -r。现在尝试在终端的新标签页中打开ipython。错误消失了。原因是:

  1. 命令路径在您调用它们之后被缓存,因此它实际上不会在shell会话中多次在PATH中搜索给定命令。
  2. which不知道此缓存,因此ipython不一定指向将在shell会话中调用之前将调用的ipython
  3. hash -r只是重置此缓存,以便再次准确。

答案 2 :(得分:0)

是否已设置VIRTUAL_ENVecho $VIRTUAL_ENV以检查VIRTUAL_ENV中的export VIRTUAL_ENV=/path/to/virtual_env.bashrc,然后打开新终端!