#python #c #header-files #filepath
#python #c #заголовочные файлы #путь к файлу
Вопрос:
Я создаю модуль Python с использованием C, хотя при использовании #include <Python.h>
он сообщает, что нашел этот файл, хотя я добавил его в пользовательскую PATH
переменную.
Если я использую #include "C:/Users/<my user>/AppData/Local/Programs/Python/Python38/include/Python.h"
, это работает на моем компьютере, хотя это приводит к ошибкам при импорте через PyPI, поэтому я хотел бы, чтобы работал первый метод.
Любые идеи относительно того, как я могу это исправить, были бы с благодарностью приняты!
Комментарии:
1. Вы забыли упомянуть, какой компилятор C вы используете, но я не думаю, что кто-либо из них использует
PATH
переменную для определения своего шаблона поиска по каталогу include.2.
PATH
Переменная среды — это путь поиска для исполняемых файлов, а не для C, включаемых в файлы.3. Я забыл упомянуть, что ошибка в CLion, а не при его компиляции и загрузке. Извините за это…
4. Компилятор Microsoft C поддерживает аргументы командной строки, которые указывают, где искать файлы заголовков, поэтому параметр для файлов заголовков Python может отсутствовать (не имеет ничего общего с
PATH
переменной окружения).5. Разве у CLion нет настроек проекта для настройки путей включения файлов?
Ответ №1:
Я не знаю ни одного компилятора, который использует PATH
для поиска включенных файлов. Вместо этого они используют отдельную переменную среды, такую как C_INCLUDE_PATH
. Вам нужно найти правильную переменную среды для установки.
Вы почти наверняка можете установить это где-нибудь в настройках CLion, либо глобально, либо для конкретного проекта. Ознакомьтесь с их файлом справки: https://www.jetbrains.com/help/clion/managing-included-files.html и https://www.jetbrains.com/help/clion/absolute-path-variables.html
В качестве альтернативы, у всех компиляторов есть опция командной строки для указания пути поиска include. Для gcc
используйте -I
.
Ответ №2:
Я нашел способ обойти эту проблему, просто используя определения, специфичные для препроцессора и CLion:
#ifdef __CLION_IDE_
#include "C:/Users/<user>/AppData/Local/Programs/Python/Python38/include/Python.h"
#include "C:/Users/<user>/AppData/Local/Programs/Python/Python38/include/structmember.h"
#else
#include <Python.h>
#include <structmember.h>
#endif
который будет использовать определенный путь в CLion и заголовок при сборке модуля python.
Комментарии:
1. Это не макрос, вы используете препроцессор компилятора C.
2. Вместо того, чтобы использовать полный путь, вам нужно определить правильную переменную среды для включения пути.
3. @Code-Apprentice: Почему именно использование переменной среды для указания пути к включаемому файлу предпочтительнее (при условии, что CLion его поддерживает).?
4. @martineau Это более гибко, скажем, если OP хочет выполнить сборку на основе другой версии Python, тогда единственное изменение касается envvar, а не кода.