为什么选择py,而不选择pyc或pyo?


8

当我安装python deb软件包时,说python-numpy这些文件是普通的python文件。我如何告诉包管理器-我实际上更愿意使用pyc甚至更好的pyo文件?

Answers:


12

您已经拥有它们并且已经在使用它们

安装文件,打包好的Python应用程序.pyc将以脚本运行的方式编译为文件。根据包装指南,这是必需的,以便能够采用您当时正在使用的Python安装。请记住,文件非常特定于您的系统(Python版本和依赖项)。.pyc

因此,Lintian专门将所有文件.pyo.pyc文件排除在软件包之外,并标记为错误

软件包中不得包含已编译的python源文件。这些文件应从软件包中删除,并在安装时在postinst中创建。

有关详细信息,请参见Debian Python策略第2.6节(模块字节编译)。

严重性:严重,确定性:肯定

python-numpy这种安装后的情况下,字节编译由pycentral的debhelper挂钩处理。安装后,它看起来像这样:

ls -l /usr/lib/python2.7/dist-packages/numpy
lrwxrwxrwx  1 root root     47 Mar 20  2012 add_newdocs.py -> ../../../../share/pyshared/numpy/add_newdocs.py
-rw-r--r--  1 root root 251912 Aug  6 22:06 add_newdocs.pyc

一些其他背景信息

以下是您在首次启动应用程序时未在运行时编译这些.pyc/ .pyo文件的原因。

Python文件安装在系统范围的目录中,系统上的所有用户均可使用。每当用户启动应用程序时,Python解释器都可以读取.py文件,但不能写入目录(例如/usr/lib/python2.7/dist-packages/)。这是所有Linux系统中一般安全性的一部分;用户不应该写信/usr,仅应具有root权限。因此,APT挂钩会在安装时为您编译Python文件。首先是最小化程序包的大小,其次是一旦您的系统对Python进行了某些更改,便能够重新挂钩,因为例如在升级过程中它们不兼容时,需要重新编译。

但是,这不会影响在运行时编译的常规用户拥有的python文件。


因此,我应该使/usr/share/pyshared/自己可写-为了使python能够在首次运行时编译文件。
Adobe

4
@Adobe什么?没有!切勿使这些系统目录对用户可写。您的软件包管理人员已经为您编译了它们(按照我在答复中要说的内容)。现在进行了更新,以使其更加清晰。
gertvdijk

您现在-我只是看了/usr/lib/python2.7/dist-packages/numpy-有pyc文件。我记得我在几个安装程序中看过-那里只有纯py文件。所以我有点“无法重现错误”。
Adobe

为什么.pyc还不存在的唯一原因是该软件包尚未完全安装。打开包装后,还有其他步骤。IIRC python-central挂钩仅在安装所有软件包之后运行。因此,在安装软件包的运行中或中断的APT会话中,很可能会发现您所描述的情况。
gertvdijk 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.