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

为什么在安装lib-devels后重新编译python?,python,python-2.7,python-3.x,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 注意:我已经两次重新编译python了,bzip2-devel的bcoz和sqlite-devel以前都丢

为什么我们要重新编译/重新安装python,以便在安装的以下lib-devels上生效?(第一次编译时错过了)

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

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

注意:我已经两次重新编译python了,bzip2-devel的bcoz和sqlite-devel以前都丢失了。

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


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

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

此外,在使用libsqlite3构建一个CPython,然后在另一台机器上安装不存在libsqlite3的CPython的特殊情况下,您同样不能这样做。对于大多数依赖项,CPython目前不支持这种用例

以上两种都是CPython“电池包括在内”心态的后果;假设所有可用的东西都将内置到解释器中;如果缺少它,它要么与给定的平台不兼容(比如,windows上的ncurses),要么被故意跳过用于嵌入式系统(比如,robotics平台上的tk)

但这只是与CPython捆绑在一起的C扩展的一个特殊特性,而不是python用于一般C扩展的固有属性。事实上,现在很多c扩展都不是这样写的


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

我不清楚您的问题。Yum合并二进制软件包,而不是从源代码编译,是吗?那么
yum
命令是否强制python重新安装?这是个什么问题?您是否已
pip将
python依赖项安装到系统的
sitepackages
dir中?对于例如:ImportError:没有名为_sqlite3的模块,即使安装了sqlite-devel和pysqlite,此错误仍将存在。解决方案是,我们必须从源代码重新编译python并安装pysqlite。所以,不确定为什么现有python不会链接安装的lib-devel?您的
前缀是否与原始版本匹配?Thks。这是将已安装的lib-devels动态链接到python以避免再次重建它的方法吗?我喜欢你说的方式——“包括电池在内的”CPython心态的后果”。我认为,由于默认情况下CPython包含很多模块,那么它的安装文档也应该包括在其源代码make和make install之前安装依赖的lib-devels。