Python无法在Debian Lenny上编译_curses模块
我在几个服务器上安装的Python(2.6)没有编译支持curses这个功能,而我现在需要这个功能。虽然这些服务器上已经安装了libncurses5,但Python并没有为它编译绑定,所以当我尝试“import curses”时,出现了以下问题:
"ImportError: No module named _curses"
我的/lib/目录下有以下文件和符号链接:
lrwxrwxrwx 1 root root 17 2010-02-13 05:50 /lib/libncurses.so.5 -> libncurses.so.5.7
-rw-r--r-- 1 root root 251K 2008-12-14 22:31 /lib/libncurses.so.5.7
lrwxrwxrwx 1 root root 18 2010-02-13 05:50 /lib/libncursesw.so.5 -> libncursesw.so.5.7
-rw-r--r-- 1 root root 299K 2008-12-14 22:31 /lib/libncursesw.so.5.7
而/lib64/目录下有:
lrwxrwxrwx 1 root root 20 2010-08-13 12:26 /lib64/libncurses.so -> /lib/libncurses.so.5
lrwxrwxrwx 1 root root 17 2010-02-13 05:50 /lib64/libncurses.so.5 -> libncurses.so.5.7
-rw-r--r-- 1 root root 251K 2008-12-14 22:31 /lib64/libncurses.so.5.7
lrwxrwxrwx 1 root root 18 2010-02-13 05:50 /lib64/libncursesw.so.5 -> libncursesw.so.5.7
-rw-r--r-- 1 root root 299K 2008-12-14 22:31 /lib64/libncursesw.so.5.7
/usr/lib64和/usr/lib目录下都有:
lrwxrwxrwx 1 root root 20 2010-08-13 12:20 /usr/lib64/libncurses.so -> /lib/libncurses.so.5
当我尝试重新“make” Python时,最后得到了以下警告:
Failed to find the necessary bits to build these modules:
_curses_panel _tkinter bsddb185
bz2 dl gdbm
imageop readline sunaudiodev
To find the necessary bits, look in setup.py in detect_modules() for the module's name.
Failed to build these modules:
_curses
我需要做些什么才能重新编译Python以支持curses?我缺少了什么呢?
谢谢!
3 个回答
顺便说一下,在CentOS 6.4 64位系统上,编译Python 2.7.6时,你需要安装以下所有开发库:
yum install -y zlib-devel openssl-devel sqlite-devel bzip2-devel \
ncurses-devel readline-devel gdbm-devel db4-devel tk-devel
安装完这些库后,运行 make
,会发现还有四个模块没有编译成功:
Python构建完成,但构建这些模块所需的部分没有找到:
bsddb185 dl imageop sunaudiodev
要找到所需的部分,可以在setup.py文件中的detect_modules()函数里查找模块的名称。
根据这篇博客,这些模块已经过时:
sunaudiodev
是为Sun平台准备的,dl
是为32位平台的,imageop
已经不再使用,而bsddb185
没有文档说明。
没错,安装 libncurses5-dev
,然后在 python
安装目录下运行 'make'
和 'make install'
就解决了问题。我在尝试安装并启动 bpython
时,第一次遇到了 _curses
的错误,那时我是在用自己定制的 Python 安装。
我不太确定到底是哪个操作解决了我的问题,但其中一个确实有效。我安装了libncurses5-dev和libreadline5-dev,然后重新编译了Python并重新安装(就是执行make和make install命令)。太好了!