簡體   English   中英

適用於 Python 2.7 的 Microsoft Visual C++ 編譯器

[英]Microsoft Visual C++ Compiler for Python 2.7

我下載了Microsoft Visual C++ Compiler for Python 2.7並安裝, vcvarsall.bat的完整路徑為:

C:\Users\UserName\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\vcvarsall.bat

但是下面的代碼不能返回它的路徑:

from distutils import msvc9compiler
msvc9compiler.find_vcvarsall(9.0)

安裝程序並沒有將安裝信息寫入注冊表,從find_vcvarsall()的源代碼find_vcvarsall() ,似乎無法從VS90COMNTOOLS設置中找到vcvarsall.bat文件,因為它需要的文件夾名稱包含vcvarsall.batVC

productdir = os.path.join(toolsdir, os.pardir, os.pardir, "VC")

如何在不修改注冊表或文件夾名稱的情況下使用編譯器?

將 setuptools 更新到 6.0 或更高版本。 在這些版本的setuptools可以自動檢測微軟的Visual C ++編譯器為Python 2.7與vcvarsall.bat。

請參考:

  1. https://pypi.python.org/pypi/setuptools/6.1#id4
  2. https://bitbucket.org/pypa/setuptools/issue/258

查看您嘗試安裝的軟件包的setup.py文件。 如果它是一個較舊的包,它可能正在導入distutils.core.setup()而不是setuptools.setup()

我在 2015 年遇到了這些因素的組合:

  1. 來自http://aka.ms/vcpython27 的適用於 Python 2.7 的 Microsoft Visual C++ 編譯器

  2. 使用distutils.core.setup()的舊包

  3. 嘗試執行python setup.py build而不是使用pip

如果您使用最新版本的 pip,它會強制(monkeypatch)包使用 setuptools,即使它的setup.py調用 distutils。 但是,如果您不使用 pip,而只是執行python setup.py build ,則構建過程將使用distutils.core.setup() ,它不知道編譯器安裝位置。


解決方案

步驟 1:打開相應的 Visual C++ 2008 命令提示符

打開“開始”菜單或“開始”屏幕,然后搜索“Visual C++ 2008 32-bit Command Prompt”(如果您的 python 是 32 位)或“Visual C++ 2008 64-bit Command Prompt”(如果您的 python 是 64 位) . 運行。 命令提示符應在標題欄中顯示 Visual C++ 2008 ...。

第二步:設置環境變量

在您剛剛打開的命令提示符中設置這些環境變量。

SET DISTUTILS_USE_SDK=1
SET MSSdk=1

參考http://bugs.python.org/issue23246

第 3 步:構建和安裝

cd到要構建的包,然后運行python setup.py build ,然后python setup.py install 如果要安裝到 virtualenv,請在構建之前激活它。

Christian Long 提供了一個切實可行的解決方案。 但是如果不想每次都在“Visual C++ 2008 32-bit/64-bit Command”中修改,可以簡單的找出“vcvarsall.bat”的位置,即“C:\\Users\\UserName\\AppData \\Local\\Programs\\Common\\Microsoft\\Visual C++ for Python\\9.0\\vcvarsall.bat”,然后修改 Python27\\Lib\\distutils\\msvc9compiler.py 中的 find_vcvarsall(version) 函數

像這樣:

def find_vcvarsall(version):
    productdir= "C:/Users/UserName/AppData/Local/Programs/Common/Microsoft/Visual C++ for Python/9.0"
    vcvarsall = os.path.join(productdir, "vcvarsall.bat")
    if os.path.isfile(vcvarsall):
        return vcvarsall
    else:
        return None

簡單,丑陋但有用。

請注意,Microsoft 不再允許您下載所需的 Visual Studio 2008 VC++ Build Tools,但可以在存檔中找到該文件: https : //web.archive.org/web/20210106040224/https : //download.microsoft.com /download/7/9/6/796EF2E4-801B-4FC4-AB28-B59FBF6D907B/VCForPython27.msi

我在這個包上遇到了同樣的問題,似乎他們並沒有真正用干凈的安裝來測試它。

最后,我只是添加了一個 Key 來創建COMPUTER\\HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\VisualStudio\\9.0\\Setup\\VC然后我添加了一個名為productdir的字符串值,該值設置為我的 vcvarsall.bat 路徑,其中和你的一樣。

在命令行中升級您的 setuptools:

pip install --upgrade setuptools

6.0 以上的最新版 setuptools 應自動檢測 Microsoft Visual C++ Compiler for Python 2.7

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM