Нужно ли удалять файлы pyc при обновлении Python ** в ** основной версии? - PullRequest
0 голосов
/ 01 июля 2018

TL; DR

Если вы переключаетесь между 3.6.6 и 3.7.0 до принятия 3.7.0, это не проблема, два набора pyc-файлов будут сожительствовать, и вы будете в порядке.

Что если вы переключаетесь между 3.6.4 и 3.6.6? Вам нужно удалить файлы pyc?

Длинная версия

Я вижу, что файлы pyc предназначены только для основных выпусков. Например у меня есть:

__init__.cpython-36.pyc
__init__.cpython-37.pyc

, который предположительно является результатом PEP 3147 .

И так, это достаточно ясно. Если я буду двигаться вперед и назад во время разработки между виртуальными средами, скажем, в 3.6.6 и 3.7.0, это не будет проблемой. Две версии будут сожительствовать в каталоге __pycache__, поскольку они идентифицируются по основному номеру версии.

Вопрос : Как насчет переключения туда и обратно между, скажем, 3.6.4 и 3.6.6, действительно ли мне нужно удалять файлы pyc при переключении с одной версии на другую в тот же основной выпуск?

Мотивация на вопрос

Причина, по которой мне нужно было переключать виртуальные среды, заключается в том, что я думал, что мой код работает нормально с некоторыми версиями Python 3, но не с другими. Я получал множество

ImportError: No module named XYZ

ошибки.

Но когда я уничтожаю все pyc-файлы и устанавливаю одну версию Python или другую, настраиваем виртуальную среду

~/venv-362
~/venv-364
~/venv-366
~/venv-370

тогда все хорошо и код работает нормально.

1 Ответ

0 голосов
/ 01 июля 2018

.pyc оборудование разработано, чтобы быть полностью прозрачным для пользователя. В частности, согласно Совместимы ли файлы Python 2.5 .pyc с файлами Python 2.6 .pyc , .pyc содержит версию Python, которая использовалась для его компиляции.

Таким образом, хотя вы можете очистить старые файлы, чтобы у вас не было устаревших данных, которые в любом случае не будут использоваться, они никак не должны влиять на выполнение.

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


Это не означает, что вы не должны восстанавливать их при обновлении - в соответствии с совместимостью байт-кода python , Python не дает никаких гарантий о совместимости байт-кода между выпусками, даже микро релизы . Обычно они восстанавливаются по требованию, но если у вас нет прав на запись в соответствующий каталог, вы должны сделать это во время установки или после, например, с помощью. compileall.

...