用于Python 2.7的Microsoft Visual C ++编译器

时间:2014-10-01 11:21:21

标签: python visual-c++

我已下载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()的源代码,它似乎无法从vcvarsall.bat设置中找到VS90COMNTOOLS文件,因为它要求包含vcvarsall.bat的文件夹的名称为VC

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

如何在不修改注册表或文件夹名称的情况下使用编译器?

6 个答案:

答案 0 :(得分:24)

将setuptools更新为6.0或更高版本。在那些版本中,setuptools可以使用 vcvarsall.bat 自动检测Microsoft Visual C ++ Compiler for Python 2.7。

请参阅:

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

答案 1 :(得分:22)

查看您要安装的软件包的setup.py文件。如果是旧版软件包,则可能导入distutils.core.setup()而不是setuptools.setup()

我参与了这个(2015年),结合了以下因素:

  1. 来自http://aka.ms/vcpython27的Microsoft Visual C ++编译器Python 2.7

  2. 使用distutils.core.setup()

  3. 的较旧软件包
  4. 尝试python setup.py build而不是pip

  5. 如果你使用最新版本的pip,它会强制(monkeypatch)包使用setuptools,即使它的setup.py调用了distutils。但是,如果您不使用pip,而只是执行python setup.py build,则构建过程将使用distutils.core.setup(),它不知道编译器的安装位置。


    解决方案

    步骤1:打开相应的Visual C ++ 2008命令提示符

    打开“开始”菜单或“开始”屏幕,然后搜索" Visual C ++ 2008 32位命令提示符" (如果你的python是32位)或" Visual C ++ 2008 64位命令提示符" (如果你的python是64位)。运行。命令提示符应该在标题栏中显示Visual C ++ 2008 ....

    第2步:设置环境变量

    在刚刚打开的命令提示符中设置这些环境变量。

    SET DISTUTILS_USE_SDK=1
    SET MSSdk=1
    

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

    第3步:构建并安装

    cd到您要构建的包,然后运行python setup.py build,然后python setup.py install。如果要安装到virtualenv中,请在构建之前将其激活。

答案 2 :(得分:8)

Christian Long提供了切实可行的解决方案。但是如果你不想每次都在“Visual C ++ 2008 32位/ 64位命令”中修改它,你可以简单地找到“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(版本)函数

像这样:

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

简单,丑陋但有用。

答案 3 :(得分:5)

我对这个软件包有同样的问题,看起来他们并没有真正用干净的安装来测试它。

最后我添加了一个用于创建COMPUTER\HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\9.0\Setup\VC的密钥,然后我添加了一个名为productdir的字符串值,其值设置为我的vcvarsall.bat路径,与您的路径相同

答案 4 :(得分:4)

在命令行中升级setuptools:

pip install --upgrade setuptools

6.0以上的setuptools的最新版本应该自动检测用于Python 2.7的Microsoft Visual C ++编译器

答案 5 :(得分:-1)

您只需要这个链接: https://www.microsoft.com/en-us/download/details.aspx?id=44266

无需升级或修改路径变量或其他任何内容。