Когда создаются файлы *.pyc (связанные с их deb-пакетами) и как их воссоздать?

У меня есть две системы Ubuntu 18.04.1 LTS:

  1. чистая установка Ubuntu 18.04.1 LTS
  2. обновлен с Ubuntu 16.04.5 LTS

Примечание. Все компоненты обеих систем были установлены с использованием APT (из deb-packages). Я не пользовалась pip/pip3, make install, checkinstall и другие подобные утилиты. Так что это абсолютно по теме. Это 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.0 а также gir1.2-unity-5.0,
Но после переустановки этих пакетов *.pyc файлы не создаются.

Что случилось?
Как получить *.pyc на своих местах? Будет ли моя система работать нормально без этих файлов?

2 ответа

Решение

Я жду APT на основе

Это не связано с APT, так что это займет некоторое время;-)

Что случилось?

Ничего такого.

Как получить *.pyc на свои места?

Если вы действительно хотите, вы можете сделать это вручную с помощью py_compile. Из командной строки python (замените {pyfile.py} на тот, который вы хотите скомпилировать):

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

Существует также метод командной строки, который позволяет скомпилировать все в каталоге с...

python -m compileall .

Хотя на самом деле в этом нет необходимости: они создаются при использовании программного обеспечения на вашем компьютере. Вот почему это не имеет отношения к APT.

Будет ли моя система работать нормально без этих файлов?

Да.

Что на самом деле происходит: когда модуль импортируется или когда источник был изменен, .pyc файл, содержащий скомпилированный код, будет создан в том же каталоге, что и .py file, Этот файл используется для пропуска этапа компиляции для этого модуля. Экономит несколько миллисекунд при выполнении (не важно для обычного использования, но представьте, что веб-сервер вызывает один и тот же сценарий 1000 раз за секунду. Эти миллисекунды внезапно становятся важными).

Что касается не видя .pyc файл где-то:

Есть моменты, когда Python не может скомпилировать. 1 пример: если вы используете второго пользователя, которому не разрешено создавать файл в месте, где будет храниться компиляция. Выполнение не остановится, а затем будет использовать исходный код (а не скомпилированную версию) (запуск сценария не считается импортом; это делается только для модулей).

*.pyc файлы содержат байт-код Python. Они создаются, когда соответствующие *.py файл выполняется в первый раз (и обновляется при первом запуске после соответствующей *.py изменения).

Поскольку интерпретатор Python на вашей машине может создавать *.pyc файлов и хорош в создании их на лету, *.pycфайлы не включены в репозитории APT. Они просто генерируются на вашей машине из соответствующего *.py файлы - которые включены.

В результате машина, используемая в течение более длительного времени и работающая с большим количеством приложений, вероятно, будет содержать больше *.pyc файлы, чем чистая установка ОС, если вы не очистите эти файлы.

Смотрите также:

Другие вопросы по тегам