Python Extension 編譯問題

獨木發表於2013-09-12

Python 的一大好處是呼叫C擴充套件程式相當方便,但是 Windows 下的話,編譯器版本是一個大問題。以Python27為例,官方版本時採用VC2008編譯的。在setup.py中新增Extension 語句,預設搜尋的的是 VS90COMNTOOLS。如果沒有安裝對於的版本就是大問題了。

如何 work around 呢?目前採用如下程式碼來繞過編譯器版本問題。

import os
import platform as plat
from sys import platform

if platform == 'win32' or platform == "windows":
    extraLinkArgs = ['/MANIFEST']
    # Handle the very frequent case when user need to use Visual C++ 2010
    # with Python that wants to use Visual C++ 2008.
    if plat.python_compiler().startswith('MSC v.1500'):
        if (not ('VS90COMNTOOLS' in os.environ)):
            if 'VS100COMNTOOLS' in os.environ:
                os.environ['VS90COMNTOOLS'] = os.environ['VS100COMNTOOLS']
            elif ('VS110COMNTOOLS' in os.environ):
              os.environ['VS90COMNTOOLS'] = os.environ['VS110COMNTOOLS']
elif platform == 'linux2':
    pass
else:
    raise Exception("Platform '" + platform + "' isn't supported")

 這裡主要是搜尋其他版本的VC編譯器,替換了一下環境變數。至於 extraLinkArgs 則是為了新增到編譯連結選項裡,這樣VC2010之後的版本就不至於找不到manifest檔案而導致編譯失敗。

 

相關文章