Когда создаются файлы *.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
файлы, чем чистая установка ОС, если вы не очистите эти файлы.
Смотрите также: