2017-11-15 1 views
1

Ich möchte importlib.machinery.EXTENSION_SUFFIXES von Python 3 verwenden, aber leider Python 2.7 verwenden.Python 2.7 Äquivalent von importlib.machinery.EXTENSION_SUFFIXES

EXTENSION_SUFFIXES wertet ['.cpython-34m-x86_64-linux-gnu.so', '.cpython-34m.so', '.abi3.so', '.so'], aber das ist spezifisch für meine Maschine und möglicherweise Python-Version, so kann ich nicht einfach die Liste hart codieren.

Hier ist EXTENSION_SUFFIXES in Python 3 Quelle: https://github.com/python/cpython/blob/3.6/Lib/importlib/_bootstrap_external.py#L1431 gebaut. Es scheint jedoch in die C-Implementierung (link) zu gehen, so dass es mir unklar ist, wie ich diese Informationen bekommen kann.

Wie kann ich diese Liste in Python 2.7 erhalten?

Antwort

1

Verwenden imp.get_suffixes() statt:

eine Liste von 3-Tupel-Elemente, beschreiben jeweils einen bestimmten Modultyp. Jedes Tripel hat die Form (Suffix, Modus, Typ), wobei Suffix eine Zeichenfolge ist, die an den Modulnamen angehängt wird, um den zu suchenden Dateinamen zu bilden. Mode ist die Moduszeichenfolge, die an die integrierte Funktion open() übergeben wird Öffnen Sie die Datei (dies kann "r" für Textdateien oder "rb" für Binärdateien sein), und type ist der Dateityp, der einen der unten beschriebenen Werte PY_SOURCE, PY_COMPILED oder C_EXTENSION hat.

So filtern diese in eine Liste von Suffixen für C Erweiterungsmodule:

import imp 
extension_suffixes = [suffix for (suffix, mode, type) in imp.get_suffixes() 
          if type == imp.C_EXTENSION] 

Dies auch in Python funktioniert 3, obwohl imp 3. in Python ist veraltet

+0

Perfect - danke ! –