Компилятор Microsoft Visual C++ для Python 2.7
Я скачал компилятор Microsoft Visual C++ для 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 ответов
Обновите setuptools до 6.0 или выше. В этой версии setuptools может автоматически определять компилятор Microsoft Visual C++ для Python 2.7 с помощью vcvarsall.bat.
Пожалуйста, обратитесь к:
Посмотри в setup.py
файл пакета, который вы пытаетесь установить. Если это более старый пакет, возможно, он импортирует distutils.core.setup()
скорее, чем setuptools.setup()
,
Я столкнулся с этим (в 2015 году) с сочетанием этих факторов:
Компилятор Microsoft Visual C++ для 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 C++ 2008
Откройте меню "Пуск" или начальный экран и найдите "32-битная командная строка Visual C++ 2008" (если ваш Python 32-битный) или "64-битная командная строка Visual C++ 2008" (если ваш 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, активируйте его перед сборкой.
Кристиан Лонг предлагает практическое решение. Но если вы не хотите каждый раз изменять его в "32-битной / 64-битной команде Visual C++ 2008", вы можете просто узнать местоположение "vcvarsall.bat", то есть "C:\Users\UserName\AppData". \Local\Programs\Common\Microsoft\Visual C++ для 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
Просто, некрасиво, но полезно.
У меня была та же проблема с этим пакетом, кажется, что они не тестировали его с чистой установкой.
В конце я просто добавил ключ для создания COMPUTER\HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\9.0\Setup\VC
Затем я добавил строковое значение с именем productdir
со значением, установленным для моего пути к vcvarsall.bat, который был таким же, как ваш.
Обновите ваши setuptools в командной строке:
pip install --upgrade setuptools
Последние версии setuptools выше 6.0 должны автоматически определять компилятор Microsoft Visual C++ для Python 2.7.
Все, что вам нужно, это ссылка: https://www.microsoft.com/en-us/download/details.aspx?id=44266
нет необходимости обновлять или изменять переменные пути или что-либо еще.