Python 导入简单的 C 扩展模块时出错
Python gives error when importing simple C extension module
在 windows 上,我构建了一个非常简单的“hello world”C 扩展(文件 hello.c 来自此站点 https://gist.github.com/physacco/2e1b52415f3a964ad2a542a99bebed8f)。使用VS2015我成功获得了hello.dll。问题是我不知道如何导入这个 file/module.
在 python shell (python 3.7) 中,我确保我与 hello.dll 在同一个文件夹中。我还确保 sys.path() 包含文件夹路径。但是当我写“导入你好”时,我得到一个错误“ModuleNotFoundError:没有名为 'hello' 的模块”
有谁知道这个非常简单的设置有什么问题吗?
更新:
尝试导入不存在的模块时,会报告 ModuleNotFoundError。将 hello.dll 重命名为 hello.pyd 后,将返回一个 ImportError。所以它似乎试图实际加载模块。
Python 在 Windows 上编译的模块具有扩展名 .pyd
,而不是 .dll
。如果您使用 setup.py 构建它,该文件将使用正确的名称构建。但是,您自己构建了它并给它取了一个 Python 无法识别为模块的名称。
就构建命令而言:您必须 link 使用 libpython。你看起来不像在做这个。如果模块未针对其所有依赖项 linked,那么您报告的错误绝对是您可以得到的错误。
我知道您不想使用 setup.py,但是我至少会使用它一次,看看它能做什么以及它是否有效。然后你至少会有一个命令,你可以用一组有效的选项来复制它。
在 windows 上,我构建了一个非常简单的“hello world”C 扩展(文件 hello.c 来自此站点 https://gist.github.com/physacco/2e1b52415f3a964ad2a542a99bebed8f)。使用VS2015我成功获得了hello.dll。问题是我不知道如何导入这个 file/module.
在 python shell (python 3.7) 中,我确保我与 hello.dll 在同一个文件夹中。我还确保 sys.path() 包含文件夹路径。但是当我写“导入你好”时,我得到一个错误“ModuleNotFoundError:没有名为 'hello' 的模块”
有谁知道这个非常简单的设置有什么问题吗?
更新: 尝试导入不存在的模块时,会报告 ModuleNotFoundError。将 hello.dll 重命名为 hello.pyd 后,将返回一个 ImportError。所以它似乎试图实际加载模块。
Python 在 Windows 上编译的模块具有扩展名 .pyd
,而不是 .dll
。如果您使用 setup.py 构建它,该文件将使用正确的名称构建。但是,您自己构建了它并给它取了一个 Python 无法识别为模块的名称。
就构建命令而言:您必须 link 使用 libpython。你看起来不像在做这个。如果模块未针对其所有依赖项 linked,那么您报告的错误绝对是您可以得到的错误。
我知道您不想使用 setup.py,但是我至少会使用它一次,看看它能做什么以及它是否有效。然后你至少会有一个命令,你可以用一组有效的选项来复制它。