Запуск 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

Решение:

  1. Загрузите и установите Microsoft Visual C++ 2008 Express.
  2. Загрузите и установите Microsoft Windows SDK для Windows 7 и.NET Framework 3.5 SP1. Вам понадобится только:
    • Инструменты разработчика> Заголовки и библиотеки Windows <-- это дает вам basetsd.h
    • Инструменты разработчика> Компиляторы Visual C++ <-- это дает вам 64-битные компиляторы
  3. копия 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, Обратите внимание на изменение имени файла.
  4. добавлять 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;
Другие вопросы по тегам