为什么我们要重新编译/重新安装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丢失了。
答案 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解释器中,并且当当前未安装该库时,可能会正常失败。