构建Python以及缺少模块的更多内容

时间:2011-05-29 23:50:31

标签: python ubuntu

我有另一个线程询问“缺少zlib”的帮助。有了很好的帮助,问题就解决了(差不多)。

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

一些重要问题引起了我的注意:

  1. 在构建Python(比如2.7.1)之后,如果我缺少模块,是否需要重建Python?

  2. 在构建Python之前,有没有办法找出哪些模块会丢失?说sqlite3。我为系统默认安装了sqlite3(Python 2.6.6),我可以将它导入到Python 2.6.6 shell中。现在我使用pythonbrew构建2.7.1,并且在shell中我无法导入sqlite3,因为_sqlite3不可用。我确信有一些更重要的缺失是我未来发展所需要的(例如Django ......)。

  3. 我愿意学习如何在不使用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?我得到了另一个参考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.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',
                       ]
    

    然后,再把所有东西都拉过来(这次我也做了 make clean

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

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

      

    构建/ temp.linux-i686-2.7 /家庭/ jwxie518 / Python的2.7.1 /模块/ _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的开发包

    感谢。

1 个答案:

答案 0 :(得分:43)

以下是如何构建Python并修复任何依赖项。我假设你希望这个Python与Ubuntu发行版Python完全分开,所以我指定--prefix选项将它全部安装在/ home / python27中使用标准的Python布局,即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,因为您可能会使用有趣的选项。有一次在一个最小的发行版上我不得不做--with-dbmliborder = gdbm:bdb以便让gdbm工作。当你运行./configure时,最后几行会告诉你它在哪里学到了它所学到的信息。对于Python,模块/设置对于弄清楚如何构建模块非常有用。

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

过去,在执行完全重建之前,通过注销,再次登录以及运行“sudo ldconfig”来修复库问题更为常见。