web-dev-qa-db-ja.com

setup.pyがデフォルトで使用するコンパイラ(gcc)フラグをオーバーライドするにはどうすればよいですか?

Setup.pyは、Pythonのビルドに使用されたものと同じCFLAGSを使用することを理解しています。セグメンテーション違反の単一のC拡張があります。ビルドする必要がありますなし-O2は、-O2がいくつかの値とコードを最適化しているため、コアファイルでは問題を特定できません。

-O2が使用されないように、setup.pyを変更するだけです。

Distutilsのドキュメント、特にdistutils.ccompilerdistutils.unixcompilerを読み、フラグとライブラリおよびインクルードを追加する方法を確認しましたが、デフォルトのgccフラグを変更する方法は確認していません。

具体的には、これは多くのバックポートを持つPython 2.5.1のレガシー製品用です(Fedora 8、はい、私は知っています...)。いいえ、OSまたはpythonのバージョンを変更することはできません。また、大きな問題がなければ、Pythonを再コンパイルすることはできません。環境が唯一のセグメンテーション違反である1人の顧客のために、C拡張から1つを構築する必要があります。

50
Wayne Walker
  • CFLAGS="-O0"を実行する前にsetup.pyを追加します。

    % CFLAGS="-O0" python ./setup.py
    

    -O0はコンパイル中にCFLAGSに追加されるため、以前の-O2設定を上書きします。

  • 別の方法は、-O0extra_compile_argssetup.pyに追加することです:

    moduleA = Extension('moduleA', .....,
            include_dirs = ['/usr/include', '/usr/local/include'], 
            extra_compile_args = ["-O0"], 
            )
    
  • すべてのデフォルトフラグを削除する場合は、次を使用します。

    % OPT="" python ./setup.py
    
68
clsung