Когда создаются файлы *.pyc (связанные с их deb-пакетами) и как их воссоздать?
У меня есть две системы Ubuntu 18.04.1 LTS:
- чистая установка Ubuntu 18.04.1 LTS
- обновлен с 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 файлы, чем чистая установка ОС, если вы не очистите эти файлы.
Смотрите также: