为什么在lib devels安装后重新编译python?

时间:2014-12-15 12:12:34

标签: python python-2.7 python-3.x

为什么我们要重新编译/重新安装python才能在安装的lib devels上生效? (第一次编译时错过了。)

有没有办法避免重新编译/重新安装python,以便安装的所有第三方模块都保持原样?

yum install zlib-devel bzip2-devel openssl-devel sqlite-devel ncurses-devel readline-devel tk-devel

注意:我已经重新编译了两次bzz of bzip2-devel的python,之前sqlite-devel丢失了。

2 个答案:

答案 0 :(得分:1)

就是这样:当您自己构建Python时,它会检查这些头文件是否存在。如果它们不在那里,构建过程就会跳过相关的Python模块(那些需要这些标题的模块)。

重建时,构建过程会找到头文件并触发相关模块的构建。

答案 1 :(得分:1)

在构建CPython的特定情况下,它可以使用(比如说)libsqlite3,如果存在,即使它在CPython构建时没有安装,也不会;你不能这样做,因为CPython的构建系统不是为了处理它而设计的。

此外,在使用(再次说)libsqlite3构建CPython的特定情况下,然后在不同的机器上安装不存在libsqlite3的CPython,你再次无法拥有它。对于大多数依赖项,CPython目前不支持这种用例。

以上两点都是CPython“含电池”心态的结果;假设所有可用的东西都将被内置到翻译中;如果它缺少它或者与给定平台不兼容(例如,在Windows上的ncurses),或者是故意跳过嵌入式系统(例如,在机器人平台上的tk)。

但这只是与CPython捆绑在一起的C扩展的一个特殊功能,而不是一般c扩展的python的内在属性。事实上,如今很多c扩展都不是这样编写的。

相反,使用ctypes库的纯python包装器在运行时将标准共享库粘合到python解释器中,并且当当前未安装该库时,可能会正常失败。