我当时正在读佩普3147,但被这段文字搞糊涂了:
Linux发行版(如Ubuntu 4和Debian 5)同时向用户提供多个Python版本。例如,Ubuntu9.10 Karmic用户可以安装Python2.5、2.6和3.1,而Python2.6是默认的。 这会对系统安装的第三方Python源文件产生冲突,因为您不能一次为多个Python版本编译一个Python源文件。当Python找到一个具有不匹配魔术号的pyc文件时,它又回到了重新编译源代码的较慢过程中。因此,如果您的系统安装了/usr/share/ Python /foo.py,两个不同版本的Python将争夺pyc文件并在每次编译源代码时重写它。(标准库不受此影响,因为在这些发行版上安装了多个版本的stdlib。)
为什么标准库不受pyc文件上不同Python版本之间的“战斗”影响?怎么会不受影响呢?这是否意味着它没有被重新编译?为什么安装了多个版本的stdlib解决了这个问题?
谢谢。
发布于 2019-10-30 20:34:43
每个Python版本都有一个标准库的完整副本,安装在特定于版本的目录中。因此,当您导入一个标准库时,它会找到已经为该版本正确编译的库(它有一个匹配的魔术号),因此它不需要重新编译它。
因此,当您编写类似import re的内容时,版本2.6从2.6库导入re.py,从3.1库导入re.py,等等。
https://stackoverflow.com/questions/58633215
复制相似问题