gpt4 book ai didi

python - 在 Python 中使用 SWIG 进行 C 扩展时安装文件出错

转载 作者:行者123 更新时间:2023-11-30 16:45:49 25 4
gpt4 key购买 nike

我正在使用 SWIG 尝试 C 到 Python 扩展
对于玩具应用程序,我制作了以下文件

  1. hw.c
  2. hw.h
  3. hw.i

hw.h的内容是

double hw1(double r1, double r2);

hw.c的内容是

#include<hw.h> #include <math.h>
double hw1(double r1, double r2) {
return sin(r1 + r2);
}

hw.i的内容是

%module mathModule
%{
#include <hw.h>
%}
%include<hw.h>

有人可以解释一下如何编写这个 .i 文件吗?
setup.py 的内容

from distutils.core import setup, Extension
name = 'hw'
version = '1.0'
ext_modules_list = [Extension(name = '_mathModule', sources = ["hw.i","hw.c"], include_dirs=['.'])]
setup(name=name, version=version, ext_modules = ext_modules_list)

当我构建模块时,在 iPython 中,当我尝试遵循代码
时,它会给我一个错误从 mathModule 导入 hw1
但是当我在 python shell 中运行时,同样的事情工作正常
同样在setup.py的最后一行,setup是一个方法吗?这种传递参数的方式是什么?
模块名称也由其中决定
这是我在 iPython 中遇到的错误

no module named _mathModule

还有谁能说我应该如何在扩展类中指定include_dirs?我尝试让它在当前目录中查找,因此将 . 放置在那里

预先感谢:)

最佳答案

我不知道为什么你在 iPython 和 python 中得到不同的行为,但我可以回答你的一些其他问题。

Is setup a method and what is this way of passing parameters?

setup 是 distutils.core 提供的函数,这里使用关键字参数调用它。我通常这样写调用

setup(
name = "hw",
version = "1.0",
ext_modules = [
Extension(name = '_mathModule', sources = ["hw.i","hw.c"],
]
)

但它与您的调用完全相同。

Where the name of module is decided?

安装文件定义了两个模块,一个名为“hw”,是一个 Python 模块,另一个名为“_mathModule”,是一个已编译的 C 扩展。两个名称均使用 name 关键字指定。

当您执行python setup.py build时,它会生成一个目录build,其中包含两个子目录build/temp*和build/lib*,其中*取决于您编译代码的系统。如果您调查这些目录,您应该找到 build/lib*/hw.py 和 build/lib*/_mathModule.so。构建后,这些目录不在您的 python 路径中,因此您需要执行额外的步骤才能将它们导入到 python 中。这是要么

  • 运行python setup.py install将文件复制到系统位置python 可以在哪里找到它们。
  • 创建从 main/test 目录到 build/lib* 目录中的文件的符号链接(symbolic link)
  • 将 build/lib* 添加到 PYTHONPATH 环境变量
  • 将 build/lib* 文件夹附加到 python 解释器中的 sys.path。

后三个仅用于开发和测试。分发代码时,您应该始终依赖第一个选项。

How should I specify include_dirs in Extension class?

include_dirs 仅用于编译您的扩展。一旦成功构建,该变量就不会影响模块的搜索路径。

关于python - 在 Python 中使用 SWIG 进行 C 扩展时安装文件出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43968233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com