如果我理解正确,Python编译文件是跨平台的。那么为什么大多数库都需要构建和安装?
分销商是懒惰,还是我说他们可以简单地分发pyc文件?如果不是这种情况,我如何分发一个python脚本文件,该文件具有库作为先决条件,而无需用户构建和安装库?
答案 0 :(得分:7)
因为所包含代码的格式可能随每个(主要)Python版本而变化,而源代码至少可以兼容。实现之间的格式也可能不同(其中有几个,两个最着名的是CPython and PyPy。
有关.pyc文件内部结构的详细信息,请参阅this article。
答案 1 :(得分:4)
它们是跨平台的,但不是跨版本而不是交叉实现。换句话说,不同的CPython版本可能会遇到同一个.pyc文件。
如果你看看其他实现,如PyPy,IronPython,Jython等,你根本不会有任何运气。
此外,.pyc文件对应一个.py文件。您(可能)想到的是包含用C编写的部分的库。必须将它们编译为依赖于平台的文件(.pyd,.dll,.so等)才能工作。由于没有多少开发人员拥有所有可用的支持平台,因此他们将其作为源提供给用户的系统进行编译。
答案 2 :(得分:0)
从.py文件创建.pyc文件的过程由解释器透明地完成。某些安装程序在安装时生成它们的原因纯粹是为了避免在第一次运行脚本时生成它们 - 通常是出于速度原因,但也是为了使.pyc最终可以在系统范围内生成(非用户) - 可写的)目录。与编译语言甚至是用C语言编写的Python模块不同,不技术要求这些文件首先存在 - 如果存在,您将无法直接放置自己的脚本进入python
并让它们在没有编译步骤的情况下运行。
在安装之前严格要求构建步骤的任何库当然都有一个编译为本机代码的组件 - 当然不是跨平台。对于任何pure-python库,将模块的源目录树放在PYTHONPATH中的某个位置总是足够的,直接从您下载的存档中复制它。