Почему #include <Python.h> не работает?

Я пытаюсь запустить модули Python в С++ с помощью "#include <Python.h>", однако, после установки "Дополнительные зависимости включения" проекта к "\ include", я получаю следующую ошибку при отладке,

LINK : fatal error LNK1104: cannot open file 'python27_d.lib'

Я прочитал, что мне нужно загрузить версию Python для разработки, но я не нашел ссылку для этого, плюс, мне не нужен файл "python27_d.lib" для копирования в папку "libs"

Обратите внимание, что я использую дистрибутив Anaconda для Python.

Спасибо заранее!

Ответ 1

Я не знаю много о python, но сообщение указывает, что python27_d.lib либо не существует, либо, по крайней мере, не существует там, где он ищет его.

Вы уже исправили проблему с компилятором, теперь найдите файл python27_d.lib в проводнике Windows и добавьте этот путь к пути дополнительных библиотек. Он находится в разделе Конфигурация → Linker → General → Дополнительные библиотечные каталоги.

"_d" указывает на библиотеку отладки, поэтому вы захотите, чтобы она была настроена для вашей конфигурации Debug, а другая без "_d" (вероятно) для вашей конфигурации выпуска.

Ответ 2

Я обычно обойти это, используя не-debug Python lib в сборках отладки. Как правило, это приводит к следующему коду:

#ifdef _DEBUG
  #undef _DEBUG
  #include <Python.h>
  #define _DEBUG
#else
  #include <Python.h>
#endif

где вы скрываете определение _DEBUG во время включения Python.h.

Ответ 3

Поместите визуальную студию в режим деблокирования вместо отладки.

Ответ 4

Вам не обязательно использовать сборку отладки Python... [даже если вы не повышаете usimng] Я бы посмотрел документацию boost.python, где у них есть оболочка для Python.h, которая обрабатывает все проблемы отладки Windows, так что вы можете построить расширение отладки для dll-релиза python dll.

http://www.boost.org/doc/libs/1_53_0/libs/python/doc/building.html#id19 Python Debugging Builds

Ответ 5

Я столкнулся с подобными ошибками, пытаясь использовать Boost.python для доступа к пакетам Anaconda python из С++. Позвольте мне начать с того, что мое личное представление о библиотеках С++ Boost заключается в том, что они отличная идея с неполной документацией. На boost.org имеется тонна документации, но она, как представляется, не содержит критических деталей, которые, по мнению авторов, слишком тривиальны, чтобы упоминать об этом. Но позвольте мне сойти с моего ящика...

Продолжающийся стимул для меня [надеюсь, в конечном итоге] выяснить, как заставить Boost.Python работать в моей системе, так это то, что существует множество замечательных научных пакетов Python [SymPy, Numpy, SciPy, matplotlib и т.д.], включенных в дистрибутив Anaconda, и было бы здорово получить доступ к ним из проектов на С++, построенных с помощью Qt Creator. И документы Boost, похоже, предполагают, что Boost.Python должен сделать это для меня. Увы, эти документы, похоже, не содержат критических деталей, которые авторы считают слишком тривиальными, чтобы не упоминать...

В любом случае, изначально у меня появилась ошибка сборки, указывающая на то, что python.h не удалось найти. Я избавился от этого, добавив эти два утверждения в мой проект .pro файл Qt Creator, в котором сообщается qmake, где Boost установил свои включенные файлы и где Anaconda установила файл python.h в моей системе:

INCLUDEPATH += C:\boost_1_55_0
INCLUDEPATH += C:\Anaconda\include

После этого у меня возникла ошибка LNK1104, указывающая, что python27.lib не найден. Я избавился от этого, добавив эти два утверждения в мой .pro файл. Первый сообщает qmake, где можно найти файл Anaconda python27.lib. Второй указывает qmake, где найти бинарный файл boost.python:

LIBS += "C:/Anaconda/libs"
LIBS += "C:/boost_1_55_0/stage/lib/libboost_python-vc110-mt-gd-1_55.lib"

Но, насколько я дошел до сих пор. Теперь я получаю сообщение об ошибке, указывающее, что он не может открыть файл 'C:/Anaconda/libs.obj', который я еще не нашел для исправления. Ошибка, конечно, вызвана тем, что файл не существует. Задача состоит в том, чтобы выяснить, почему ее ищут и где ее найти.

Ответ 6

В Visual studio вам необходимо добавить "Дополнительные каталоги включения" для проекта. Шаги ниже. щелкните правой кнопкой мыши по проекту → свойства → c/c++ → дополнительные каталоги включения → укажите папку "Python\include" (например, c:\python\include).