Разница между исполняемыми файлами python3 и python3m

В чем разница между исполняемыми элементами /usr/bin/python3 и /usr/bin/python3m?

Я наблюдаю их на Ubuntu 13.04, но Google предполагает, что они существуют и в других дистрибутивах.

Два файла имеют один и тот же md5sum, но не кажутся символическими ссылками или жесткими ссылками; два файла имеют разные номера inode, возвращаемые ls -li, а тестирование find -xdev -samefile /usr/bin/python3.3 не возвращает никаких других файлов.

Кто-то спросил аналогичный вопрос в AskUbuntu, но я хотел узнать больше о различии между этими двумя файлами.

Ответ 1

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

Реализации Python МОГУТ включать дополнительные флаги в имя файла при необходимости. Например, в системах POSIX эти флаги будут также вносят вклад в имя файла:

- с-pydebug (флаг: d)

- с-pymalloc (флаг: m)

- с широким юникодом (флаг: u)

через PEP 3149.

Что касается флага m, это то, что Pymalloc:

Pymalloc, специализированный распределитель объектов, написанный Владимиром Марангозов, был добавлен в Python 2.1. Pymalloc предназначен для быть быстрее, чем система malloc() и иметь меньше служебных данных памяти для шаблонов распределения, типичных для программ Python. Распределитель использует C malloc(), чтобы получить большие пулы памяти, а затем выполняет меньшие запросы памяти из этих пулов.

через Что нового в Python 2.3

Наконец, эти два файла могут быть жестко привязаны к некоторым системам. Хотя два файла имеют разные номера inode в моей системе Ubuntu 13.04 (таким образом, это разные файлы), comp.lang.python post с двух лет назад показывает, что они когда-то были жестко привязаны.

Ответ 2

Python 2 и Python 3 широко используются. Причина, по которой есть две версии, заключается в том, что Python 3 представил несколько новых ключевых слов. Это означало бы, что код Python 2, скомпилированный с помощью компилятора Python 3, может сломаться, если имя переменной, например, совпадает с ключевым словом Python 3. Решение о том, что нужно делать, зависит от вашей ситуации, но в целом новые проекты должны, вероятно, использовать Python 3.

Для части после "точки" Python 2 будет ссылаться на последнюю версию Python 2 (например, 2.7), а Python 3 будет ссылаться на последнюю версию 3.5. Обычные "Python" ссылки на Python 2. Я не знаю, что происходит внутри компиляторов, но Python 3.5 и Python 3.5m имеют отдельные исполняемые файлы, но они байт-байт идентичны на моем Ubuntu 16.04.