удалить * .pyc продолжение - PullRequest
0 голосов
/ 20 апреля 2009

В качестве продолжения этого вопроса , у меня новый вопрос:

Что происходит внутри os.remove(module_name) и del sys.modules["module_name"]?

Ответы [ 3 ]

4 голосов
/ 20 апреля 2009

Краткий ответ: os.remove(module_name) удалит файл из файловой системы. del sys.modules["module_name"] удалит модуль из кэша ранее загруженных модулей, который поддерживает текущий интерпретатор Python.

В Python, когда вы импортируете модуль, интерпретатор проверяет, существует ли файл .pyc с тем же именем, что и файл .py, который вы пытаетесь импортировать. Если есть, и если файл .py не изменился с момента импорта файла .pyc, то Python загрузит файл .pyc (что значительно быстрее).

Если файл .pyc не существует или файл .py был изменен с момента создания файла .pyc, то файл .py загружается и создается новый файл .pyc. (Стоит отметить, что простой запуск файла Python, скажем, test.py будет , а не приведет к созданию test.pyc. Только import ing-модули вызывают это.)

sys.modules - это совсем другое дело. Чтобы ускорить код, который дважды импортирует один и тот же модуль, Python поддерживает список модулей, которые были импортированы во время текущего сеанса интерпретатора. Если импортируемый модуль находится в sys.modules, то будет прочитана кэшированная версия (ни файлы .py, ни .pyc не будут проверяться на диске). Python предоставляет встроенную функцию reload(), которая позволяет обойти кеш модуля и выполнить перезагрузку с диска.

Для получения дополнительной информации о модульной системе Python см. Документацию по modules .

2 голосов
/ 19 октября 2010

Я запускаю много приложений, подобных этому

import os

os.system('attrib +H *.pyc /S')

В Windows это скрывает все видимые скомпилированные файлы при запуске приложения - они дают мне очки.

1 голос
/ 05 октября 2010

мой вкладчик для этой работы:

find . -name *.pyc |xargs rm

Примечание: вам нужна Linux (или Unix-подобная ОС)

...