Компилятор Microsoft Visual С++ для Python 2.7

Я загрузил Microsoft Visual С++ Compiler для 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")

Как я могу использовать компилятор без изменения имени реестра или папки?

Ответ 2

Посмотрите в файле setup.py пакета, который вы пытаетесь установить. Если это более старый пакет, он может импортировать distutils.core.setup(), а не setuptools.setup().

Я столкнулся с этим (в 2015 году) с сочетанием этих факторов:

  • Компилятор Microsoft Visual С++ для Python 2.7 из http://aka.ms/vcpython27

  • Более старый пакет, в котором используется distutils.core.setup()

  • Попытка сделать python setup.py build вместо использования pip.

Если вы используете недавнюю версию pip, она заставит (monkeypatch) пакет использовать setuptools, даже если его setup.py вызывает distutils. Однако, если вы не используете pip и вместо этого выполняете python setup.py build, процесс сборки будет использовать distutils.core.setup(), который не знает о месте установки компилятора.


Решение

Шаг 1: Откройте соответствующую командную строку Visual С++ 2008

Откройте меню "Пуск" или "Начало" и выполните поиск "32-разрядной командной строки Visual С++ 2008" (если ваш питон 32-разрядный) или "64-разрядная командная строка Visual С++ 2008" (если ваш питон 64 -немного). Запустить его. Командная строка должна указать Visual С++ 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, активируйте его перед сборкой.

Ответ 3

Christian Long предлагает практическое решение. Но если вы не хотите изменять его в "32-битной/64-битной команде Visual С++ 2008" каждый раз, вы можете просто узнать местоположение "vcvarsall.bat", то есть "C:\Users\UserName\AppData" \Local\Programs\Common\Microsoft\Visual С++ для Python\9.0\vcvarsall.bat ", а затем измените функцию find_vcvarsall (version) в Python27\Lib\distutils\msvc9compiler.py

вот так:

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

Простой, уродливый, но полезный.

Ответ 4

У меня была такая же проблема с этим пакетом, кажется, что они действительно не тестировали его с чистой установкой.

В конце я просто добавил ключ для создания COMPUTER\HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\9.0\Setup\VC, после чего я добавил значение String с именем productdir со значением, установленным для моего пути к vcvarsall.bat, который был таким же, как ваш.

Ответ 5

Обновите настройки setuptools в командной строке:

pip install --upgrade setuptools

Последние версии setuptools выше 6.0 должны автоматически определять Microsoft Visual С++ Compiler для Python 2.7