Answers:
安装文件后,打包好的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/lib/python2.7/dist-packages/numpy
-有pyc
文件。我记得我在几个安装程序中看过-那里只有纯py文件。所以我有点“无法重现错误”。
.pyc
还不存在的唯一原因是该软件包尚未完全安装。打开包装后,还有其他步骤。IIRC python-central挂钩仅在安装所有软件包之后运行。因此,在安装软件包的运行中或中断的APT会话中,很可能会发现您所描述的情况。
/usr/share/pyshared/
自己可写-为了使python能够在首次运行时编译文件。