2017-01-27 10 views
1

`の人を取得し、私はvirtualenvのに対して(すなわち-I...)何かをコンパイルする.virtualenvs/foo/include/pythonX.Ymのインクルードパスを構築する必要が'M'とpythonX.Ym`

(何m手段をthis questionを参照してください)。 I can getX.Ysys.versionまたはsys.final_versionを使用してください。

mにインクルードパスを作成するにはどうすればよいですか?

編集:私はsys.executableを試しましたが、これは.../foo/bin/pythonを指していますが、これは役に立たないです。インクルードパスを取得するための

答えて

3

最も簡単な方法は、sysconfig.get_path() functionを使用することです:

import sysconfig 

include_path = sysconfig.get_path('include') 

このパスはすでにvirtualenvsのために調整されています。パイソンの外スクリプティングの目的のために、あなたは、パスを直接印刷することができ、次のいずれか

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

またはスクリプトとしてモジュールを実行することにより、すべてsysconfigデータを取得する:

$ python -m sysconfig 

その後、ダンプ出力を解析stdoutに。

それ以外の場合は、実行可能ファイル名(mが含まれています)のみが必要な場合は、sys.executable variableから取得できます。これはm接尾含まれています:Pythonの3.2のよう

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

、あなたもsys.abiflags variableを使用することができますが、この場合にはmに設定されています:

>>> sys.abiflags 
'm' 

またPEP 3149を参照してください。 Ubuntuは、単に複数のバイナリをコンパイルして反映するように実行可能ファイルの名前を調整

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

注:以前のPythonのバージョン、サフィックスが設定変数として上述sysconfigモジュールを介して依然として利用可能である影響を及ぼす各種フラグについて

選択された構成オプション。他のシステムでは、ABIフラグは必ずしも実行可能名に反映されません。

+0

興味深い。私はvirtualenv(更新された質問)を使用しているときにあなたと同じものを得ていません –

+0

@J.C.Leitão:私はオフィスに着くときVMを起動します。 –

+0

'sysconfig.get_path( 'include')'は明らかに質問に対する答えです。 :) –

関連する問題