何时创建 *.pyc 文件(与其 deb 包相关)以及如何重新创建它们?

何时创建 *.pyc 文件(与其 deb 包相关)以及如何重新创建它们?

我有两个 Ubuntu 18.04.1 LTS 系统:

  1. 全新安装 Ubuntu 18.04.1 LTS
  2. 从 Ubuntu 16.04.5 LTS 升级

笔记:两个系统中的所有内容都已使用 APT 安装(来自德布-packages)。我没有使用pip/ pip3make installcheckinstall其他类似的实用程序。所以这绝对是主题。它是 Ubuntu,Ubuntu 使用 APT。

第一个系统具有以下pyc文件:

  • /usr/lib/python2.7/dist-packages/gi/overrides/Dee.pyc
  • /usr/lib/python3/dist-packages/gi/overrides/__pycache__/Dee.cpython-36.pyc
  • /usr/lib/python2.7/dist-packages/gi/overrides/Unity.pyc
  • /usr/lib/python3/dist-packages/gi/overrides/__pycache__/Unity.cpython-36.pyc

第二个系统没有这些文件。

我无法使用 找到这些文件的包dpkg -S。但我可以找到脚本(*.py)。

据我了解,这些文件来自gir1.2-dee-1.0gir1.2-unity-5.0
但重新安装这些软件包后,*.pyc文件就不会被创建。

出了什么问题?
如何找到*.pyc它们?如果没有这些文件,我的系统还能正常工作吗?

答案1

我正在等待基于 APT 的

这与 APT 无关,因此需要花费一些时间 ;-)

怎么了?

没有什么。

如何将 *.pyc 放到它们的位置?

如果你真的想要,你可以手动完成py_编译. 从 python 命令行(将 {pyfile.py} 替换为您要编译的):

>>> import py_compile
>>> py_compile.compile('{pyfile.py}')

还有一种命令行方法,允许使用...编译目录中的所有内容。

python -m compileall .

但实际上没有必要这样做:这些被创建当你在机器上使用软件时。这也是为什么这与 APT 无关。

如果没有这些文件,我的系统还能正常工作吗?

是的。

实际发生的情况:当导入模块或更改源代码时,.pyc将在与 相同的目录中创建一个包含已编译代码的文件.py file。此文件用于跳过该模块的编译步骤。执行时间缩短了几毫秒(对于正常使用来说并不重要,但想象一下一个网络服务器在一秒钟内调用同一脚本 1000 次。这些毫秒突然变得很重要)。

关于在某处看不到.pyc文件:

有时 python 无法编译。例如,如果您使用第二个用户,而该用户无权在存储编译的位置创建文件。执行不会停止,然后会使用源代码(而不是编译后的版本)(运行脚本不被视为导入;这仅适用于模块)。

答案2

文件*.pyc包含 Python字节码*.py。它们是在第一次执行相应文件时创建的(并且在相应*.py更改后第一次运行时更新)。

由于你机器上的 Python 解释器能够创建这些*.pyc文件,并且能够很好地即时创建它们,这些*.pyc文件不包含在 APT 存储库中。*.py它们只是根据您的机器从包含的相应文件生成。

*.pyc因此,除非您清理这些文件,否则使用时间较长且运行更多应用程序的机器可能会比干净的操作系统安装包含更多的文件。

也可以看看:

相关内容