错误安装文件,同时使在Python
我尝试C到Python扩展使用痛饮
对于我所做的玩具应用程序下列文件
错误安装文件,同时使在Python
hw.c
hw.h
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>
有人能请解释一下我该怎么写。我的文件?
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中,当我尝试下面的代码from mathModule import hw1
但是,当我在Python Shell
运行同样的事情,工作正常,给我一个错误 也在setup.py的最后一行,设置了一个方法,传递参数的方式是什么?
也是在模块的名称决定
这是我在IPython中
no module named _mathModule
得到的错误也可以任何人说我应该怎么指定扩展类include_dirs
?我想,它应该在当前目录下,并因此被置于.
有
感谢提前:)
我不知道为什么你在IPython中得到不同的行为VS Python,但我可以回答你的一些其他问题。
设置了一个方法和传递参数的方法是什么?
setup是distutils.core提供的一个函数,它在这里被称为关键字参数。我通常会这样写电话
setup(
name = "hw",
version = "1.0",
ext_modules = [
Extension(name = '_mathModule', sources = ["hw.i","hw.c"],
]
)
但它完全等同于您的呼叫。
模块的名称在哪里决定?
安装文件定义了两个模块,一个叫做“hw”,一个是python模块,另一个叫做“_mathModule”,它是一个编译后的C扩展。这两个名称都是使用name关键字指定的。
当您执行python setup.py build
时,它会生成一个包含两个子目录build/temp *和build/lib *的目录,其中*取决于您编译代码的系统。如果你调查这些目录,你应该找到build/lib */hw.py和build/lib */_ mathModule.so。构建完成后,这些目录不在你的python路径中,所以你需要做一个额外的步骤,然后才能在python中导入它们。这可能是
- 运行
python setup.py install
将文件复制到系统目录 巨蟒哪里可以找到他们。 - 使符号链接从您的主/ test目录在构建
- 追加编译/ lib中*文件夹在sys.path中的文件/ lib目录*目录
- 添加构建/ lib目录*您PYTHONPATH环境变量python解释器。
后来的三个是仅用于开发和测试。分发代码时,应始终依靠第一个选项。
我应该如何在Extension类中指定
include_dirs
?
include_dirs
仅用于编译您的扩展。一旦成功构建,变量不会影响模块的搜索路径。