构建Python和更多关于丢失的模块

构建Python和更多关于丢失的模块

问题描述:

我有另一个线程询问“缺少zlib”的帮助。有了很好的帮助,问题已经解决(几乎)。构建Python和更多关于丢失的模块

现在我对自己构建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 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和

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

我试图将其导入的ReadLine了,但仍然是 “没有名为模块XXXX”。

AskUbuntu我其实问过人们如何获得以前的命令,因为我在Python 2.7.1 shell中时无法使用该功能。我相信这是由于readline。 Readline

我放在这个目录下的Python 2.7.1:/家庭/ 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?我有另外一个参考here(这是在中国,不过)

# 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。也是。

那么这里发生了什么? Readline也是不可导入的。


3RD编辑 我一开始所做的一切,但我没有重新安装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/tem/usr/lib/WL/usr/local/lib -Wl,-R/usr/lib -/usr/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。 sqlite3的开发包在Pythonbrew安装Python-2.7.1之后安装。

谢谢。

以下是如何构建Python并修复任何依赖关系。我假设你希望这个Python完全独立于Ubuntu发行版Python,所以我指定--prefix选项将它全部安装在使用标准Python布局的/ home/python27中,即站点包而不是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建设前的东西,因为有可能是因为你可以用有趣的选项。有一次,我必须做一个最小化的发行版 - with-dbmliborder = gdbm:bdb以获得gdbm的工作。当你运行./configure时,最后几行会告诉你它把它学到的信息放在哪里。在Python的情况下,Modules/Setup对于弄清楚如何构建模块非常有用。

另一个有用的东西是make clean,然后运行make >make.out 2>&1捕获完整make过程的所有输出。然后,完成后,使用less或编辑器查找问题模块(如_sqlite)的详细信息。例如,检查传递给gcc的所有-I选项。如果正确的包含目录不在列表中会导致问题。您可以编辑setup.py来更改包含目录的列表。

在过去,更常见的有,将被注销,重新登录,做一个完整的重建之前运行“命令ldconfig命令”固定库的问题。

+0

@迈克尔·狄龙感谢您的帮助。我遵循你的指导,无法获得进口权。我编辑了我的帖子。请查看编辑部分。谢谢! – CppLearner 2011-05-30 02:23:11

+0

在你的编辑中,你没有说你在运行apt-get后再次运行'make'命令。你又跑了吗? – 2011-05-30 02:41:47

+0

@迈克尔狄龙是的。我做到了。在第二次编辑之前。我做了所有必要的步骤。我还重建蟒蛇后,我安装的sqlite3 – CppLearner 2011-05-30 02:59:38