Это на самом деле зависит от платформы, Python имеет разные суффиксы, которые он пытается в зависимости от операционной системы.Вот инициализация таблицы суффиксов в import.c
:
#ifdef HAVE_DYNAMIC_LOADING
memcpy(filetab, _PyImport_DynLoadFiletab,
countD * sizeof(struct filedescr));
#endif
memcpy(filetab + countD, _PyImport_StandardFiletab,
countS * sizeof(struct filedescr));
filetab[countD + countS].suffix = NULL;
_PyImport_Filetab = filetab;
Так что она объединяет два списка, _PyImport_DynLoadFiletab
и _PyImport_StandardFiletab
.Последний проще, он определен как [".py", ".pyw", ".pyc"]
в том же файле (вторая запись присутствует только в Windows)._PyImport_DynLoadFiletab
определяется в различных dynload_<platform>.c
файлах.В Unix-системах его значение равно [".so", "module.so"]
, для CygWin оно определяет [".dll", "module.dll"]
, тогда как для OS / 2 это [".pyd", ".dll"]
, а для Windows это просто [".pyd"]
.
Я пошелчерез историю исходного кода и, наконец, пришел к этому изменению с 1999 года, которое, очевидно, добавило «module.so» в качестве возможного суффикса: http://hg.python.org/cpython-fullhistory/diff/8efa37a770c6/Python/importdl.c. Таким образом, изменения были первоначально добавлены для NeXTStep (тот, который в конечном итоге стал Mac OS X), только для определенных настроек ссылок.Я не знаю этой ОС, поэтому трудно сказать, почему это было сделано - я подозреваю, что это было просто для предотвращения конфликтов имен.Например, библиотека фреймворка foo.so
может быть уже загружена, и ОС не позволит загрузить другую библиотеку с тем же именем.Таким образом, foomodule.so
был компромиссом, позволившим существовать модулю Python с именем foo
.
Редактировать : абзац выше был неправильным - я не пошелдостаточно далеко назад в истории, спасибо senderle за указание на это.На самом деле интересное изменение выглядит как http://hg.python.org/cpython-fullhistory/diff/2230/Python/import.c от 1994 года, когда новая схема именования модулей (foo.so
) была добавлена в качестве альтернативы старой схеме (foomodule.so
).Я полагаю, что в какой-то момент старая форма устарела, поскольку ее поддержка была удалена для некоторых платформ, таких как Windows, в одном из многочисленных переписываний этого кода.Обратите внимание, что даже когда он был впервые представлен, версия с коротким именем модуля была указана первой - это означает, что она уже была предпочтительным вариантом.
Edit2 : я искал список рассылки / группу новостей с 1994 попосмотрим, обсуждалось ли где-нибудь это изменение - похоже, что это не так, похоже, Гвидо ван Россум реализовал его, не сказав никому.