在缺少的模块上构建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,并且在外壳程序中无法导入sqlite3,因为_sqlite3不可用。我确信还有一些更重要的内容需要我将来的开发(例如Django ..)。
我愿意学习如何在不使用pythonbrew的情况下进行构建。
请与我分享您在构建另一个版本的Python中的经验,您将如何解决缺少模块的问题?是否有构建Python的实用解决方案?
我从来没有打扰自己一个人,所以请忍受我。我开始意识到学习和建立自己的重要性!非常感谢你!
编辑
首先,我感谢您的所有投入。他们意义重大。我做了建筑。
Python build finished, but the necessary bits to build these modules were not found:
_bsddb _curses _curses_panel
_tkinter bsddb185 bz2
dbm gdbm readline
sunaudiodev _sqlite3
To find the necessary bits, look in setup.py in detect_modules() for the module's name.
我得到了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 # verbose debug prints from this script?
# We hunt for #define SQLITE_VERSION "n.n.n"
# We need to find >= sqlite version 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吗?我在这里有另一个参考
(不过是中文)
# Download the latest and extract
# Go into the extracted directory
./configure --prefix=/home/jwxie518/python27/python
make && make install
# Then edit python-2.7 's setup.py before rebuild it
# Sample (add these two lines to the end....)
'~/share/software/python/sqlite-3.6.20/include',
'~/share/software/python/sqlite-3.6.20/include/sqlite3',
# Then rebuild python like how we did before
我进入安装sqlite3的目录。我发现只有 include / sqlite3.h 。所以我回过头去检查 / usr / include /
。我也只能找到sqlite3.h。
那么这是怎么回事?Readline也不重要。
3RD EDIT 我重新开始了一切,除了没有重新安装sqlite3。
# Extract Python-2.7.1
# cd into 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并进行了更改:
# We hunt for #define SQLITE_VERSION "n.n.n"
# We need to find >= sqlite version 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',
]
然后,再次将所有内容都 清理干净 (这次我也做了 清理工作 )
输出在这里: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。在SQLbrew安装Python-2.7.1之后,安装了sqlite3的开发包。
谢谢。
-
这是构建Python和修复所有依赖项的方法。我假设您希望此Python与Ubuntu版本的Python完全分开,所以我指定–
prefix选项,以使用标准Python布局将其全部安装在/ home / python27中,即使用site-packages而不是dist-包。1. Get the .tar.gz file into your own home directory. 2. tar zxvf Py*.tar.gz 3. cd Py*1 4. ./configure --prefix=/home/python27 5. make 6. make install
步骤5是重要的一步。最后,它将显示无法正确构建的所有模块的列表。通常,您可以通过安装Ubuntu软件包并重新运行make来解决此问题。
a. sudo apt-get install something-dev b. make
遇到问题很常见,因为您缺少某些模块或其他模块的-dev插件。但是有时候您应该像这样重新开始:
a. make clean b. ./configure --prefix=/home/python27 c. make
如果您不确定,从头开始不会有任何伤害。关于步骤6的重要说明。我在此命令上未使用sudo,这意味着您将需要已使用适当的所有权创建了/ home /
python27目录。./configure --help |less
在构建某些东西之前不要犹豫,因为您可能会使用一些有趣的选项。为了使gdbm正常运行,我不得不在一个最小的发行版上做一次–with-
dbmliborder =
gdbm:bdb。当您运行./configure时,最后几行将告诉您将所学信息放在何处。对于Python,“模块/设置”有助于弄清楚如何构建模块。另一个有用的事情是
make clean
,然后运行make >make.out 2>&1
以捕获整个制造过程中的所有输出。然后,完成后,使用less
或编辑器在问题模块(例如_sqlite)上查找详细信息。例如,检查传递给的所有-
I选项gcc
。如果正确的包含目录不在列表中,将导致问题。您可以编辑setup.py
以更改包含目录的列表。过去,更常见的问题是可以通过注销,再次登录并在完全重建之前运行“ sudo ldconfig”来解决库问题。