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

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

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

Примечание: Все вещи в обеих системах были установлены с помощью APT (от deb-пакетов). Я не использовал 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
задан 7 August 2018 в 12:22

2 ответа

Я ожидаю основанного на APT

Это не связано с APT так, чтобы собрался занять время ;-)

Что не так?

Ничего.

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

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

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

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

python -m compileall .

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

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

Да.

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

Относительно не наблюдения a .pyc зарегистрируйте где-нибудь:

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

4
ответ дан 2 December 2019 в 01:53

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

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

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

См. также:

1
ответ дан 2 December 2019 в 01:53

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

Похожие вопросы: