удалить * .pyc - PullRequest
       26

удалить * .pyc

1 голос
/ 16 апреля 2009

У меня есть три модуля:

one.py:

def abc():
    print "Heeeeeeeeeeeiiiiiioooooooooo"

two.py:

import one

def defg():
    one.abc()

three.py:

import os
from time import sleep

import two
two.defg()

sleep(20)


directory = os.listdir('.')

for filename in directory:
    if filename[-3:] == 'pyc':
        print '- ' + filename
        os.remove(filename)

У меня три сомнения. Пожалуйста, помогите мне .

Когда я запускаю three.py в первый раз, будут созданы one.pyc и two.pyc. Я вижу это, так как я дал 20 секундную задержку. После выполнения оператора os.remove(filename) они удаляются. Пока здесь хорошо.

Снова, не закрывая IDLE и скрипт, я запустил three.py. На этот раз файл .pyc не был создан. Почему это так ?

Если я закрою IDLE так же, как и сценарий, .pyc будет создан, как и раньше.

Почему скомпилированный код не создается снова и снова?

Кроме того, если я внесу изменение в one.py, оно не будет показано, если я бегу без закрытия оболочек. Мне тоже нужно решение для этого.

Третье сомнение - , если скомпилированный код удаляется сам в первый раз, то как второй запуск дает тот же результат без .pyc?

Надеясь на решение ...

Ответы [ 3 ]

8 голосов
/ 16 апреля 2009

.pyc не создается снова, потому что в вашем коде есть ссылка на ваш импортированный модуль. При повторном запуске используется эта ссылка.

Вот почему .pyc не генерируется снова, а также почему дополнительные изменения не запускаются.

Вы можете либо удалить все ссылки и вызвать сборщик мусора, либо использовать встроенную функцию reload () в модулях. e.g.:

reload(three)
1 голос
/ 16 января 2015

Отредактируйте ~ / .bashrc и добавьте в него эту функцию оболочки

$ кд; pyclean

pyclean () {
        find . -type f -name "*.py[co]" -delete
        find . -type d -name "__pycache__" -delete
}    
1 голос
/ 16 апреля 2009

Я думаю, что IDLE кэширует байт-код в своем собственном процессе Python, поэтому нет необходимости создавать его заново при каждом запуске файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...