构建Python和其他丢失的模块
构建Python和其他丢失的模块
我有一个帖子寻求关于“缺失的zlib”的帮助。在热心的帮助下问题已经解决(几乎)。
现在我对自己构建Python(在Ubuntu 10.10上)很感兴趣。
有几个重要的问题引起了我的注意:
- 在构建Python(比如2.7.1)之后,如果有缺失的模块,我需要重新构建Python吗?
- 在构建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导致的。
我将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的开发包。
谢谢。