【问题标题】:Python.h is in PATH but still not foundPython.h 在 PATH 中但仍未找到
【发布时间】:2020-08-13 16:20:31
【问题描述】:

我正在使用 C 创建一个 Python 模块,但是当我使用 #include <Python.h> 时它说它找到了这个文件,即使我已将它添加到用户 PATH 变量中。

如果我使用#include "C:/Users/<my user>/AppData/Local/Programs/Python/Python38/include/Python.h",它可以在我的 PC 上运行,虽然这会在通过 PyPi 导入时导致错误,所以我希望第一种方法可以工作。

任何关于如何解决此问题的想法将不胜感激!

【问题讨论】:

  • 您忽略了提及您使用的是哪个 C 编译器,但我认为他们中的任何一个都没有使用 PATH 变量来确定他们的包含目录搜索模式。
  • PATH 环境变量是可执行文件的搜索路径,而不是 C 包含文件的搜索路径。
  • 我忘了说错误在 CLion 中,而不是在编译和上传时。对此感到抱歉...
  • Microsoft C 编译器支持命令行参数,这些参数指定在哪里查找头文件,因此 Python 头文件的那个可能会丢失(与 PATH 环境变量无关) .
  • CLion 没有项目设置来设置包含文件路径吗?

标签: python c header-files filepath


【解决方案1】:

我不知道有任何编译器使用PATH 来查找包含文件。相反,它们使用单​​独的环境变量,例如C_INCLUDE_PATH。您需要找到正确的环境变量进行设置。

您几乎可以肯定地在 CLion 的设置中的某个地方进行设置,无论是全局设置还是针对特定项目。查看他们的帮助文件:https://www.jetbrains.com/help/clion/managing-included-files.htmlhttps://www.jetbrains.com/help/clion/absolute-path-variables.html

另外,所有编译器都有一个命令行选项来指定包含搜索路径。对于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
    

    在构建 python 模块时将使用 CLion 中的特定路径和标头。

    【讨论】:

    • 这不是宏,您使用的是 C 编译器的预处理器。
    • 您需要确定正确的环境变量以包含路径,而不是使用完整路径。
    • @Code-Apprentice:为什么使用环境变量来指定包含文件路径更可取(假设 CLion 支持它)。?
    • @martineau 它更灵活,比如说如果 OP 想要针对不同版本的 Python 进行构建,那么唯一的变化就是对 envvar 进行更改,而不是对代码进行更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 2020-11-22
    • 1970-01-01
    • 2021-11-29
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多