构建Python和其他丢失的模块

10 浏览
0 Comments

构建Python和其他丢失的模块

我有一个帖子寻求关于“缺失的zlib”的帮助。在热心的帮助下问题已经解决(几乎)。

现在我对自己构建Python(在Ubuntu 10.10上)很感兴趣。

有几个重要的问题引起了我的注意:

  1. 在构建Python(比如2.7.1)之后,如果有缺失的模块,我需要重新构建Python吗?
  2. 在构建Python之前有没有办法找出哪些模块会缺失?比如sqlite3。我已经为系统默认的Python 2.6.6安装了sqlite3,并且可以将其导入Python 2.6.6的shell中。现在我使用pythonbrew来构建2.7.1,在shell中我无法导入sqlite3,因为缺少_sqlite3。我确定还有一些其他重要的模块也会缺失,这些模块对于未来的开发很重要(比如Django..)。

我愿意学习如何在不使用pythonbrew的情况下进行构建。

请与我分享您构建另一个版本的Python的经验,以及您如何解决缺失模块的问题?是否有实际的解决方案来构建Python?

我从来没有费心自己构建过,所以请谅解。我开始意识到学习和自己构建的重要性!非常感谢!


编辑

首先,感谢您所有的建议,它们非常有用。我进行了构建。

Python构建完成,但缺少构建这些模块所需的部分:
_bsddb             _curses            _curses_panel   
_tkinter           bsddb185           bz2             
dbm                gdbm               readline        
sunaudiodev        _sqlite3                                    
要查找所需的部分,请在setup.py中的detect_modules()中查找模块的名称。

我通过以下方式解决了sqlite3和readline问题:

sudo apt-get install libreadline6 libreadline6-dev
sudo apt-get install libsqlite3-dev

我尝试导入它们,但仍然报"没有名为xxxx的模块"的错误。

AskUbuntu上,我实际上询问了人们如何获取先前的命令,因为当我在Python 2.7.1的shell中时无法使用该功能。我相信这是由于readline导致的。

Readline

我将Python-2.7.1安装在此目录下:/home/jwxie518/python27/

我查看了setup.py,发现以下几行:

# The sqlite interface
sqlite_setup_debug = False   # 是否打印详细的调试信息?
# 我们在这里寻找 #define SQLITE_VERSION "n.n.n"
# 我们需要找到 >= sqlite 版本 3.0.8
sqlite_incdir = sqlite_libdir = None
sqlite_inc_paths = [ '/usr/include',
                     '/usr/include/sqlite',
                     '/usr/include/sqlite3',
                     '/usr/local/include',
                     '/usr/local/include/sqlite',
                     '/usr/local/include/sqlite3',
                   ]

上面列出的所有路径都不存在。

所以我猜我必须手动安装sqlite3?我在这里找到了另一个参考(中文)

# 下载最新版本并解压
# 进入解压后的目录
./configure --prefix=/home/jwxie518/python27/python
make && make install
# 然后在重新构建之前编辑python-2.7的setup.py
# 示例(在最后添加这两行....)
'~/share/software/python/sqlite-3.6.20/include',
'~/share/software/python/sqlite-3.6.20/include/sqlite3',
# 然后像之前一样重新构建python

我进入了我安装sqlite3的目录。我只找到了include/sqlite3.h。所以我回去检查了/usr/include/。我只找到了sqlite3.h。

这是怎么回事?readline也无法导入。


第三次编辑

我重新开始了一切,除了没有重新安装sqlite3。

# 解压Python-2.7.1
# 进入Python-2.7.1目录
# ./configure
make >make.out 2>&1
less make.out

make.out在这里:http://pastebin.com/raw.php?i=7k3BfxZQ

我仍然无法导入sqlite3。所以我进入setup.py并进行了更改:

# 我们在这里寻找 #define SQLITE_VERSION "n.n.n"
# 我们需要找到 >= sqlite 版本 3.0.8
sqlite_incdir = sqlite_libdir = None
sqlite_inc_paths = [ '/usr/include',
                     '/usr/include/sqlite',
                     '/usr/include/sqlite3',
                     '/usr/local/include',
                     '/usr/local/include/sqlite',
                     '/usr/local/include/sqlite3',
                     '/home/jwxie518/python-mod/include/sqlite',
                     '/home/jwxie518/python-mod/include/sqlite3',
                   ]

然后,再次运行了所有步骤(这次我还执行了make clean

输出在这里:http://pastebin.com/raw.php?i=8ZKgAcWn

根据输出,我不认为自定义路径被包含在内....(有关完整输出,请转到上面的链接并搜索sqlite)

build/temp.linux-i686-2.7/home/jwxie518/Python-2.7.1/Modules/_sqlite/util.o

-L/usr/lib -L/usr/local/lib -Wl,-R/usr/lib -lsqlite3 -o build/lib.linux-i686-2.7/_sqlite3.so

我仍然无法导入sqlite3。

谢谢!


非常感谢Michael Dillon的帮助。您的教程很清晰明了。

当我意识到每次尝试Python-2.7.1时,我实际上使用的是Pythonbrew安装的那个时,我解决了这个问题。

故事的寓意是读取所有的错误。我忽略了导入sqlite3时生成的错误。由Pythonbrew安装的那个没有安装sqlite3。在Pythonbrew安装Python-2.7.1之后,安装了sqlite3的开发包。

谢谢。

0