Acabamos de ter o mesmo problema. Usando as informações fornecidas neste tópico, consegui ir mais longe.
Eu usei apt source python2.7
e debuild -b -uc -us
para inspecionar em detalhes como o pacote oficial foi criado. A implementação de imp.get_suffixes()
está em Python / import.c: 2940 imp_get_suffixes(...)
, que lê sufixos da lista chamada _PyImport_Filetab
. Essa lista, por sua vez, é basicamente _PyImport_DynLoadFiletab
e _PyImport_StandardFiletab
concatenada.
Tornou-se óbvio que _PyImport_DynLoadFiletab
é o que deveríamos estar procurando, e sua definição varia para diferentes plataformas - elas estão em Python / dynload _ *. c. Em Python / dynload_shlib.c é:
const struct filedescr _PyImport_DynLoadFiletab[] = {
#ifdef __CYGWIN__
{".dll", "rb", C_EXTENSION},
{"module.dll", "rb", C_EXTENSION},
#else
#if defined(PYOS_OS2) && defined(PYCC_GCC)
{".pyd", "rb", C_EXTENSION},
{".dll", "rb", C_EXTENSION},
#else
#ifdef __VMS
{".exe", "rb", C_EXTENSION},
{".EXE", "rb", C_EXTENSION},
{"module.exe", "rb", C_EXTENSION},
{"MODULE.EXE", "rb", C_EXTENSION},
#else
#ifdef Py_DEBUG
{"_d.so", "rb", C_EXTENSION},
{"module_d.so", "rb", C_EXTENSION},
# ifdef MULTIARCH
{"." MULTIARCH "_d.so", "rb", C_EXTENSION},
# endif
#endif
#ifdef MULTIARCH
{"." MULTIARCH ".so", "rb", C_EXTENSION},
#endif
{".so", "rb", C_EXTENSION},
{"module.so", "rb", C_EXTENSION},
#endif
#endif
#endif
{0, 0}
};
Está bem aqui: MULTIARCH
, se você olhar o log de criação, será "x86_64-linux-gnu"
(com aspas, por causa do -
s). O valor é aparentemente de dpkg-architecture -qDEB_HOST_MULTIARCH
, mas não verifiquei.
Mais importante, _PyImport_DynLoadFiletab
não se parece com isso originalmente em dynload_shlib.c, foi corrigido. Portanto, para obter o mesmo comportamento, é necessário aplicar um patch, pelo menos, adicionar a parte {"." MULTIARCH ".so", ...}
. No meu caso, o patch deste arquivo (dynload_shlib.c) parece suficiente.