6

如果我理解正确,Python 编译文件是跨平台的。那么为什么大多数发布的库都需要构建和安装呢?

是分发者的懒惰,还是说他们可以简单地分发 pyc 文件是错误的?如果不是这种情况,我如何分发一个包含库作为先决条件的 python 脚本文件,而不需要用户构建和安装库?

4

3 回答 3

7

因为包含的代码的格式可以随着每个(主要)Python 版本而改变,而源代码至少可以兼容。格式在实现之间也可能不同(其中有几个,最著名的两个是CPython 和 PyPy

有关.pyc 文件的内部结构的更多信息,请参阅本文。

于 2013-04-17T12:05:24.573 回答
4

它们是跨平台的,但不是跨版本的,也不是跨实现的。换句话说,不同的 CPython 版本可能会遇到同一个 .pyc 文件的问题。

而且,如果您查看其他实现,例如 PyPy、IronPython、Jython 等,您将根本无法使用 .pyc 文件。

此外,.pyc 文件对应一个 .py 文件。您(可能)想到的是包含用 C 编写的部分的库。它们必须编译为平台相关文件(.pyd、.dll、.so 等)才能工作。由于没有多少开发人员拥有所有支持的平台,他们将其作为源提供,并将其留给用户系统进行编译。

于 2013-04-17T12:09:00.023 回答
0

从 .py 文件创建 .pyc 文件的过程由解释器透明地完成。一些安装程序在安装时生成它们的原因纯粹是为了避免必须在第一次运行脚本时生成它们 - 通常是出于速度原因,但也因此 .pyc 可以最终在系统范围内(非用户-writable) 目录。与编译语言,甚至是用 C 编写的 Python 模块不同,这些文件首先存在并不是技术要求——如果存在,您将无法将自己的脚本直接放入python并让它们在没有编译步骤。

任何在安装之前严格要求构建步骤的库肯定都有一个可以编译为本机代码的组件——这当然不是跨平台的。对于任何纯 python 库,将模块的源目录树放在 PYTHONPATH 中的某个位置总是足够的,直接从下载它的存档中复制它。

于 2013-04-17T12:15:55.983 回答