Разница между исполняемыми файлами 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.