Динамическое обновление 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.