在缺少的模块上构建Python等

发布于 2021-01-29 18:18:14

我有另一个线程在“缺少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,并且在外壳程序中无法导入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的开发包。

谢谢。

关注者
0
被浏览
51
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这是构建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”来解决库问题。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看