![](/img/trans.png)
[英]Visual Microsoft Visual C++ Compiler for Python 2.7 vs MinGW
[英]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.bat
是VC
:
productdir = os.path.join(toolsdir, os.pardir, os.pardir, "VC")
如何在不修改注冊表或文件夾名稱的情況下使用編譯器?
將 setuptools 更新到 6.0 或更高版本。 在這些版本的setuptools可以自動檢測微軟的Visual C ++編譯器為Python 2.7與vcvarsall.bat。
請參考:
查看您嘗試安裝的軟件包的setup.py
文件。 如果它是一個較舊的包,它可能正在導入distutils.core.setup()
而不是setuptools.setup()
。
我在 2015 年遇到了這些因素的組合:
來自http://aka.ms/vcpython27 的適用於 Python 2.7 的 Microsoft Visual C++ 編譯器
使用distutils.core.setup()
的舊包
嘗試執行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.