2013-04-17 29 views
5

如果我理解正确,Python编译文件是跨平台的。那么为什么大多数图书馆都需要构建和安装?为什么python库不是以pyc的形式提供的?

它是懒惰的分配器的一部分,还是我错在说,他们可以简单地分配PYC文件?如果情况并非如此,那么如何分发一个以库为先决条件的python脚本文件,而不需要用户构建和安装库?

+5

而且,我认为这是值得一提的是,只有业绩增长你通过“编译”得到的是在最初的“import”中。否则,一切都以完全相同的速度运行。换句话说,你不会注意到从pyc或py中运行的性能有差异。 – mgilson

回答

7

由于其中包含的代码的格式可以与每个(主要)的Python释放变化,而源代码至少可以兼容。该格式还可以实现(其中有几间不同,两个最知名的是CPython and PyPy

更多信息请参见this article有关的pyc文件的内部结构。

4

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

如果你看看其他的实现,比如PyPy,IronPython,Jython等,你不会有pyc文件运气的话。

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

+0

关于最后一部分的注意事项:扩展模块的二进制分发是Windows上的常态,很少有人有编译器。 – delnan

0

从.py文件创建.pyc文件文件的过程被解释透明的完成。其原因一些安装生成它们在安装时纯粹是为了避免它们具有要产生的第一次运行脚本 - 通常为速度的原因,也使得pyc文件可以在全系统(非用户结束可写)目录。不像编译语言或C语言编写的,甚至Python模块,它是,在第一个地方存在这些文件技术要求 - 如果是,你就不能直接把自己的脚本到python,并让他们无需编译步骤即可运行。

是严格要求那肯定是安装前的生成步骤的任何图书馆编译为本地代码的组件 - 这当然不是跨平台的。对于任何纯Python库,它始终是足以使模块的源目录树的地方在你的PYTHONPATH,已经直接从你下载了它在存档复制它。

相关问题