2017-01-27 2 views
1

(Siehe this question für das, was die m Mittel)Holen Sie sich das `m` und andere von` pythonX.Ym`

ich umfassen konstruieren müssen Pfad von .virtualenvs/foo/include/pythonX.Ym etwas (das heißt -I...) gegen die virtualenv zu kompilieren. I can get die X.Y mit sys.version oder sys.final_version.

Wie bekomme ich die m den Include-Pfad zu erstellen?

EDIT: Ich versuchte sys.executable, aber das zeigt auf .../foo/bin/python, die dafür nicht hilfreich ist.

Antwort

3

Der einfachste Weg des Include-Pfad zu erhalten, ist die sysconfig.get_path() function zu verwenden:

import sysconfig 

include_path = sysconfig.get_path('include') 

Dieser Weg bereits für virtualenvs eingestellt wird. Für Scripting Zwecke außerhalb Python, können Sie entweder den Pfad direkt drucken:

$ python -c 'import sysconfig; print(sysconfig.get_path("include"))' 

oder allesysconfig Daten erhalten, indem Sie das Modul als Skript ausgeführt wird:

$ python -m sysconfig 

dann die Ausgabe analysieren, die Dumps aufstehen.

Wenn Sie nur den Namen der ausführbaren Datei (mit der m im Lieferumfang enthalten) wollen, können Sie das von der sys.executable variable; dazu gehört auch die m Suffix:

>>> import sys 
>>> sys.executable 
'/usr/bin/python3.5m' 

Ab Python 3.2, können Sie auch die sys.abiflags variable verwenden; es ist m in diesem Fall gesetzt:

>>> sys.abiflags 
'm' 

Auch PEP 3149 sehen.

Für frühere Python-Versionen, die die verschiedenen Flaggen die Suffixe beeinflussen, sind über die oben genannte sysconfig Modul als Konfigurationsvariablen zur Verfügung noch:

pymalloc = bool(sysconfig.get_config('WITH_PYMALLOC')) 
pydebug = bool(sysconfig.get_config('WITH_PYDEBUG')) 
wideunicode = bool(sysconfig.get_config('WITH_WIDE_UNICODE')) 

Beachten Sie, dass ubuntu kompiliert lediglich mehrere Binärdateien und stellt den Namen der ausführbaren Datei der widerzuspiegeln Konfigurationsoption gewählt; Auf anderen Systemen spiegeln sich die ABI-Flags nicht unbedingt im ausführbaren Namen wider.

+0

Interessant. Ich bekomme nicht das selbe wie Sie, wenn Sie einen virtualenv (aktualisierte Frage) verwenden –

+0

@ J.C.Leitão: Ich feuere ein vm auf, wenn ich im Büro komme. –

+0

'sysconfig.get_path ('include')' ist definitiv die Antwort auf die Frage. :) –