Динамическое обновление PYTHONPATH предотвращает обновление.pyc

Чтобы позволить себе иметь четкую файловую структуру в моем проекте, я использую следующий фрагмент кода, чтобы динамически добавить основную папку проекта в PYTHONPATH и, следовательно, гарантировать, что я могу импортировать файлы даже из местоположения файлов.

import sys
import os
sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), "."))

Так как я сделал это, когда я запускаю свой основной файл, изменения в модулях больше не распознаются, пока я не удаляю любые файлы.pyc вручную. Таким образом, я предполагаю, что это по какой-то причине помешало python проверять актуальность файлов pyc. Могу ли я решить эту проблему каким-либо образом?

2 ответа

Добавление пути к уже импортированному модулю может вызвать проблемы, если имена модулей более не являются уникальными. Считайте, что вы делаете import foo, который добавляет свой родительский пакет bar в sys.path - теперь можно также сделать import bar.foo, Python будет рассматривать оба модуля как разные, что может испортить все, что зависит от идентичности модуля.

Вы должны действительно подумать, почему вы должны сделать этот взлом в первую очередь. Если у вас есть исполняемый файл, помещенный в ваш пакет, вы не должны делать

cd bardir/bar
python foo

но вместо этого назовите это как часть пакета через

cd bardir
python -m bar.foo

Вы можете попытаться заставить Python не писать эти *.pyc файлы.

Как избежать файлов.pyc?

Для крупных проектов это будет иметь незначительное значение с точки зрения производительности. Вполне возможно, что вы не заботитесь об этом, и тогда вы можете просто не создавать файлы pyc.

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