Python标准库不受pyc重写战斗的影响

Python标准库不受pyc重写战斗的影响,python,python-3.x,Python,Python 3.x,我正在阅读,但被这段话弄糊涂了: Linux发行版,如Ubuntu[4]和Debian[5]提供了不止一个Python版本 同时对他们的用户。例如,Ubuntu 9.10 Karmic Koala用户可以安装 Python2.5、2.6和3.1,默认为Python2.6 这会导致系统安装的第三方Python源文件发生冲突, 因为一次不能为多个Python版本编译单个Python源文件。 当Python发现一个pyc文件有一个不匹配的幻数时,它会退回到较慢的进程 重新编译源代码。因此,如果您的系统

我正在阅读,但被这段话弄糊涂了:

Linux发行版,如Ubuntu[4]和Debian[5]提供了不止一个Python版本 同时对他们的用户。例如,Ubuntu 9.10 Karmic Koala用户可以安装 Python2.5、2.6和3.1,默认为Python2.6

这会导致系统安装的第三方Python源文件发生冲突, 因为一次不能为多个Python版本编译单个Python源文件。 当Python发现一个pyc文件有一个不匹配的幻数时,它会退回到较慢的进程 重新编译源代码。因此,如果您的系统安装了a/usr/share/python/foo.py,则会出现两个不同版本的python 将争夺pyc文件,并在每次编译源代码时重写它。标准库是 不受此影响,因为此类发行版上安装了多个版本的stdlib

为什么标准库不受不同Python版本之间围绕pyc文件的“斗争”的影响?它是如何不受影响的?这是否意味着它没有重新编译?为什么安装多个版本的stdlib可以解决这个问题


谢谢。

每个版本的Python都有一个标准库的完整副本,安装在特定版本的目录中。因此,当您导入一个标准库时,它会找到已经为该版本正确编译的库,它有一个匹配的幻数,因此不需要重新编译它


因此,当您编写类似导入re的内容时,2.6版从2.6库导入re.py,3.1版从3.1库导入re.py,等等。

因此,当它说标准库不受影响时,意味着标准库中的模块不必重新编译?我不明白为什么他们不明白?Python知道不尝试在不同的Python版本stdlib中编译模块吗?它从相同的版本中获取模块。因此,基本上,如果我运行Python 2.6并导入一些源文件,如/usr/share/bar/foo.py,pyc将编译为2.6,那么如果我做了同样的事情,但使用了类似Python 2.7之类的东西,那么pyc文件就不同了,这是一个问题,因为如果要在Python2.6中使用pyc,就必须重新编译/usr/share/bar/foo.py。stdlib模块不受此影响,因为每个Python版本都在自己的特定于版本的目录中查找stdlib模块。这就是它的要点,对吧?不,当你使用完整的路径名时就不是了。我们讨论的是标准库,所以您只需导入re。只是为了澄清,我之前的评论哪部分是不正确的?