当我安装 python deb 包时,假设python-numpy
文件是普通的 python 文件。我该如何告诉包管理器——我实际上宁愿使用 pyc 甚至更好的—— pyo 文件?
答案1
你已经拥有它们并且正在使用它们
.pyc
打包好的 Python 应用程序正在脚本运行中编译为文件后已完成文件安装。根据打包指南,这是必要的,以便能够适应您当前正在使用的 Python 安装。请记住,.pyc
文件与您的系统(Python 版本和依赖项)非常相关。
因此,所有.pyo
和.pyc
文件均被明确排除在包和被 Lintian 标记为错误:
编译后的 Python 源文件不得包含在软件包中。应从软件包中删除这些文件,并在软件包安装时在 postinst 中创建这些文件。
參閱Debian Python 政策第 2.6 节(模块字节编译) 了解详情。
严重程度:严重,确定性:确定
在这种情况下,python-numpy
安装后的字节编译由 pycentral 的 debhelper hook 处理。安装后它看起来像这样:
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 文件。