错误安装文件,同时使在Python

问题描述:

使用痛饮C的扩展

我尝试C到Python扩展使用痛饮
对于我所做的玩具应用程序下列文件
错误安装文件,同时使在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> 

有人能请解释一下我该怎么写。我的文件?
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仅用于编译您的扩展。一旦成功构建,变量不会影响模块的搜索路径。