Ответ 1
Обновите setuptools до версии 6.0 или выше. В этой версии setuptools может автоматически определять Microsoft Visual С++ Compiler для Python 2.7 с помощью vcvarsall.bat.
Пожалуйста, обратитесь к:
Я загрузил 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")
Как я могу использовать компилятор без изменения имени реестра или папки?
Обновите setuptools до версии 6.0 или выше. В этой версии setuptools может автоматически определять Microsoft Visual С++ Compiler для Python 2.7 с помощью vcvarsall.bat.
Пожалуйста, обратитесь к:
Посмотрите в файле 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, активируйте его перед сборкой.
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
Простой, уродливый, но полезный.
У меня была такая же проблема с этим пакетом, кажется, что они действительно не тестировали его с чистой установкой.
В конце я просто добавил ключ для создания COMPUTER\HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\9.0\Setup\VC
, после чего я добавил значение String с именем productdir
со значением, установленным для моего пути к vcvarsall.bat, который был таким же, как ваш.
Обновите настройки setuptools в командной строке:
pip install --upgrade setuptools
Последние версии setuptools выше 6.0 должны автоматически определять Microsoft Visual С++ Compiler для Python 2.7
Все, что вам нужно, это ссылка: https://www.microsoft.com/en-us/download/details.aspx?id=44266
нет необходимости обновлять или изменять переменные пути или что-то еще.