无法在ipython终端中运行魔术功能

时间:2013-06-30 21:51:51

标签: ipython enthought

我在64位Linux操作系统上使用Enthought的Canopy环境。在编辑器附带的Ipython控制台中,一切正常。但是当我在终端中ipython并尝试使用魔术函数时,我收到以下错误。

---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-3-29a4050aa687> in <module>()
----> 1 get_ipython().show_usage()

/home/shahensha/Development/Canopy/appdata/canopy-1.0.3.1262.rh5-x86_64/lib/python2.7/site-packages/IPython/core/interactiveshell.pyc in show_usage(self)
   2931     def show_usage(self):
   2932         """Show a usage message"""
-> 2933         page.page(IPython.core.usage.interactive_usage)
   2934 
   2935     def extract_input_lines(self, range_str, raw=False):

/home/shahensha/Development/Canopy/appdata/canopy-1.0.3.1262.rh5-x86_64/lib/python2.7/site-packages/IPython/core/page.pyc in page(strng, start, screen_lines, pager_cmd)
    188     if screen_lines <= 0:
    189         try:
--> 190             screen_lines += _detect_screen_size(screen_lines_def)
    191         except (TypeError, UnsupportedOperation):
    192             print(str_toprint, file=io.stdout)

/home/shahensha/Development/Canopy/appdata/canopy-1.0.3.1262.rh5-x86_64/lib/python2.7/site-packages/IPython/core/page.pyc in _detect_screen_size(screen_lines_def)
    112     # Proceed with curses initialization
    113     try:
--> 114         scr = curses.initscr()
    115     except AttributeError:
    116         # Curses on Solaris may not be complete, so we can't use it there

/home/shahensha/Development/Canopy/appdata/canopy-1.0.3.1262.rh5-x86_64/lib/python2.7/curses/__init__.pyc in initscr()
     31     # instead of calling exit() in error cases.
     32     setupterm(term=_os.environ.get("TERM", "unknown"),
---> 33               fd=_sys.__stdout__.fileno())
     34     stdscr = _curses.initscr()
     35     for key, value in _curses.__dict__.items():

error: setupterm: could not find terminfo database

所以,我安装了一个裸机的iPython shell,它不是Canopy提供的那个,并在那里尝试了相同的魔术功能,它运行正常。

我是否在安装时出错了?请帮忙

非常感谢 shahensha

3 个答案:

答案 0 :(得分:4)

这不是一个解决方案,而只是一个观察。我的桌面是MacOS-X,我连接到Centos机器以运行64位的Enthought Canopy。如果我从iterm2 ssh,我得到与OP相同的错误消息,但如果我使用终端应用程序则不会。 我不确定其根本原因是什么,但可能有人可以验证Linux是否存在类似的情况。有趣的是,我可以在本地树冠上使用iterm2或Terminal,没有任何问题。

更新

我刚刚注意到,当终端应用显示"xterm"时,iterm2中的TERM环境变量设置为"xterm-256color"。在终端中运行Canopy ipython之前发出命令export TERM="xterm-256color"在iterm2中解决了我的问题。

答案 1 :(得分:0)

Canopy用户Python似乎不是您的默认设置。看到这篇文章: https://support.enthought.com/entries/23646538-Make-Canopy-s-Python-be-your-default-Python-i-e-on-the-PATH-

更新:此处不正确 - 请参阅batu的解决方法答案。

答案 2 :(得分:0)

问题再现:

$ python -c 'import curses; curses.setupterm()'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
_curses.error: setupterm: could not find terminfo database

irc log让我觉得这个错误与libncursesw有关。

我的Canopy版本是1.0.3.1262.rh5-x86_64。我已将其安装到~/src/canopy

~/src/canopy/appdata/canopy-1.0.3.1262.rh5-x86_64/lib我们可以看到我的canopy安装有libncursesw.so.5.7。

我的机器(Debian Wheezy 64bit)有libncursesw.so.5.9(在/lib/x86_64-linux-gnu/libncursesw.so.5.9中)。我用树冠做了这个。您可以使用LD_PRELOAD并指向.so文件来打开/关闭问题。

解决方案

将libncurses.so.5.7替换为libncurses.so.5.9:

CANOPYDIR=$HOME/src/canopy
CANOPYLIBS=$CANOPYDIR/appdata/canopy-1.0.3.1262.rh5-x86_64/lib/
SYSTEMLIBS=/lib/x86_64-linux-gnu

cp $SYSTEMLIBS/libncurses.so.5.9 $CANOPYLIBS
ln -sf $CANOPYLIBS/libncurses.so.5.9 $CANOPYLIBS/libncurses.so.5