Запуск Cython в Windows x64 - фатальная ошибка C1083: Невозможно открыть включаемый файл: 'basetsd.h': Нет такого файла или каталога
Я пытался установить Cython для Python 2.7 в моей системе Windows 7. В частности, я предпочитаю все в 64 битах. (Если вам интересно, мне нужен Cython, потому что Cython - это один из компонентов, который мне нужен для другого пакета для некоторого специализированного численного анализа. И x64 потенциально является преимуществом для хранения больших наборов данных.)
Поэтому я скачал x64 Python 2.7 с официального сайта. Получил Cython от Кристофа Гольке. Конечно, версия amd64 для Python 2.7. Перед установкой я добавил Python 2.7 в реестр с .reg
файл найден в ответе Джо Д.Ф. После этого я установил компилятор Visual C++ отсюда (я не думаю, что он работает) и здесь (но этот должен). На данный момент, у меня есть в моем C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin
каталог всех vcvars32.bat
, vcvars64.bat
, vcvars86_amd64.bat
, vcvarsx86_ia64.bat
, Я побежал vcvars64.bat
и не было сообщения об ошибке.
Впоследствии я проследовал за этой страницей, чтобы создать тестовый файл "Hello World".
Затем я получил эту ошибку.
...\Tests>python setup.py build_ext --inplace
running build_ext
building 'hello' extension
error: Unable to find vcvarsall.bat
Поэтому я подумал про себя: ну, Cython не может найти этот файл, потому что он не существует. (Я искал весь жесткий диск для этого.) Так что я скопировал vcvars64.bat
от ...\VC\bin
в \VC
и изменил имя на vcvarsall.bat
, Теперь ошибка vcvarsall исчезла. И... естественно, появляется новая ошибка.
...\Tests>python setup.py build_ext --inplace
running build_ext
building 'hello' extension
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\amd64\cl.exe /c /nolog
o /Ox /MD /W3 /GS- /DNDEBUG -IC:\Python27\include -IC:\Python27\PC /Tchello.c /F
obuild\temp.win-amd64-2.7\Release\hello.obj
hello.c
C:\Python27\include\pyconfig.h(227) : fatal error C1083: Cannot open include fil
e: 'basetsd.h': No such file or directory
error: command '"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\amd64
\cl.exe"' failed with exit status 2
Теперь я понятия не имею, как поступить. Что я должен делать? Ваша помощь очень ценится.
(Для ясности я попытался установить компилятор на Mingw32. Но есть и другие ошибки. Сейчас я сосредоточен на том, чтобы заставить VC работать.)
РЕДАКТИРОВАТЬ: я пытался использовать среду сборки SDK CMD, следуя инструкциям на этой странице. Я получил ту же ошибку.
6 ответов
Если в настоящее время (2017 г.) кто-то сталкивается с той же ошибкой с помощью визуальных инструментов C++ 2015, снова запустите программу установки, а также выберите Windows 8.1 / 10 SDK в зависимости от вашей ОС. Это исправит basestd.h
ошибка.
Если он все еще не работает, попробуйте запустить инструменты сборки из: C:\Program Files (x86)\Microsoft Visual C++ Build Tools.
Другой вариант - просто установить anaconda 2 или 3 (64-битная, если также вы не хотите ошибок памяти). Он содержит все важные готовые пакеты: sklearn, matplotlib, scipy, numpy, pandas и даже фреймворки для веб-разработки, такие как flask.
Я столкнулся с этой проблемой при попытке установить pandas
в режиме "разработки". Я встаю и бегаю сейчас. Моя среда:
- Windows XP Pro x64 SP2
- WinPython 64bit 2.7.5.3 (Python 2.7.5.amd64)
<--
"зарегистрирован" как системный дистрибутив Python с помощью приложения панели управления WinPython
Проблемы, возникающие при запуске python setup.py develop
:
- Невозможно найти vcvarsall.bat
- фатальная ошибка C1083: не удается открыть файл включения: 'basetsd.h': такого файла или каталога нет... код выхода 2
Решение:
- Загрузите и установите Microsoft Visual C++ 2008 Express.
- Загрузите и установите Microsoft Windows SDK для Windows 7 и.NET Framework 3.5 SP1. Вам понадобится только:
- Инструменты разработчика> Заголовки и библиотеки Windows
<--
это дает вамbasetsd.h
- Инструменты разработчика> Компиляторы Visual C++
<--
это дает вам 64-битные компиляторы
- Инструменты разработчика> Заголовки и библиотеки Windows
- копия
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\vcvars64.bat
вC:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\amd64\vcvarsamd64.bat
, Обратите внимание на изменение имени файла. - добавлять
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin
вPATH
, Это может не потребоваться (я сделал это до переустановки SDK с заголовками и библиотеками; поэтому необходимость неизвестна).
На данный момент работает python setup.py develop
успешно завершено и python -c "import pandas; print pandas.__version__"
в результате я ожидал тег git.
[РЕДАКТИРОВАТЬ] Дальнейшее чтение:
Для тех, у кого Windows 10, скачайте SDK отсюда, чтобы исправить файл заголовка basestd.h
,
Я скачал.exe, установил и работал отлично. SDK был ~2,3 ГБ.
Примечание: для таких, как я, с 64-битными системами, которые получили дополнительную ошибку:
`LINK : fatal error LNK1158: cannot run 'rc.exe'
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\link.exe' failed with exit status 1158
Здесь есть отличный ответ, который решает проблему, помещая rc.exe
файл в правильной папке для вашей системы.
Добавьте их в установочные каталоги Visual Studio в переменные среды.
C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC
C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ bin
C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ Tools
надеюсь, что это решит проблему.
Для предложения, вы можете попробовать это для сборки 64-битного Cython с setup.py
Я использую Anaconda для распространения Python, Microsoft Windopws SDK 7 и MSVC 12.0.
Во-первых, я создаю библиотеку для своей функции cuda. Во-вторых, я запускаю python setup.py build_ext -i для папки make temp (вы получите ошибку), затем компилируете Makefile ниже,
Главным образом, я получаю это из setup.py, когда это 32-битное приложение для компиляции, затем меняю его для 64-битной компиляции.
Makefile
CL_EXE = "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\cl.exe"
LINK_EXE = "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\link.exe"
CL_FLAGS = /c /nologo /Ox /MD /W3 /GS- /DNDEBUG /O2 /fp:fast
CL_INC = -I. -I"C:\Program Files\Microsoft SDKs\Windows\v7.1\Include" \
-I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include" -IC:\Users\name\Anaconda2\envs\py27\Lib\site-packages\numpy\core\include -IC:\Users\name\Anaconda2\envs\py27\include -IC:\Users\name\Anaconda2\envs\py27\PC
LINK_FLAGS = /DLL /nologo /INCREMENTAL:NO /MACHINE:X64
LINK_LIBPATH = "/LIBPATH:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\lib\x64" \
/LIBPATH:C:\Users\name\Anaconda2\envs\py27\libs \
/LIBPATH:C:\Users\name\Anaconda2\envs\py27\PCbuild\amd64 \
/LIBPATH:C:\Users\name\Anaconda2\envs\py27\PC\VS9.0\amd64 \
"/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib\amd64" \
"/LIBPATH:C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\x64"
LINK_LIB = cuda_multiply4D.lib cudart.lib MSVCRT.lib kernel32.lib
LINK_EXPORT = /EXPORT:initmy_cuda
LINK_OBJ = build\temp.win-amd64-2.7\Release\my_cuda.obj
LINK_OUT = "/OUT:E:\my_cuda.pyd"
LINK_OTHER_CONF = /IMPLIB:build\temp.win-amd64-2.7\Release\my_cuda.lib /MANIFESTFILE:build\temp.win-amd64-2.7\Release\my_cuda.pyd.manifest
all:
$(CL_EXE) $(CL_FLAGS) $(CL_INC) /Tcmy_cuda.c /Fobuild\temp.win-amd64-2.7\Release\my_cuda.obj
$(LINK_EXE) $(LINK_FLAGS) $(LINK_LIBPATH) $(LINK_LIB) $(LINK_EXPORT) $(LINK_OBJ) $(LINK_OUT) $(LINK_OTHER_CONF)
Замечания:
- MSVCRT.lib kernel32.lib не являются обязательными,
- / EXPORT: initmy_cuda является обязательным. Его формат init% yourfilename_WO_Ext%
- "/OUT:E:\my_cuda.pyd" для определения вашего выходного местоположения, его имени файла и его расширения.
Я мог бы решить эту проблему, загрузив и установив последнюю версию Windows 10 SDK по этой ссылке:https://software-download.microsoft.com/download/pr/19041.685.201201-2105.vb_release_svc_prod1_WindowsSDK.iso .
но потом появилась другая проблема с (cpython):
error C2039: 'exc_type': is not a member of '_ts'
который я мог бы решить, объявив дополнительные указатели в
(...\python38\include\cpython\pystate.h)
Я нашел это в строке 77:
/* The exception currently being raised */
PyObject *curexc_type;
PyObject *curexc_value;
PyObject *curexc_traceback;
и я добавляю сразу после них следующее (без первых трех букв «cur»):
/* The exception currently being raised */
PyObject *exc_type;
PyObject *exc_value;
PyObject *exc_traceback;