使用SWIG定义python扩展名:可以在“导入模块”返回“ ModuleNotFoundError:没有名为模块的模块”的情况下“导入_module”

时间:2019-11-11 06:21:26

标签: python c swig

我有一个C项目,希望使用SWIG和distutils工具构建python模块(称为CDM)。我已经建立了一个setup.py文件和一个cdm.i

运行

python3 -m pip install . --user

很好,但是随后在运行的python3控制台中

import CDM

返回

ModuleNotFoundError: No module named 'CDM'

跑步时

import _CDM
_CDM.cdmNewMesh()

工作正常。

我试图跑步

python3 pip list

我在列表中看到CDM模块。

我尝试在_中删除扩展名中的setup.py,然后尝试import CDM返回ImportError: dynamic module does not define module export function (PyInit_CDM)

我尝试过使用python2,并且行为相同。

这是cdm.i

%module CDM
%{
typedef void*           CDMMesh;

extern CDMMesh cdmNewMesh( void );

%}
typedef void*           CDMMesh;

extern CDMMesh cdmNewMesh( void );

这是setup.py

#!/usr/bin/env python

from distutils.core import setup, Extension

module1 = Extension(name = '_CDM',
                    sources=['src/cdm.i', 'src/CDM_Mesh.c', 'src/CDM_IOTools.c'],
                    swig_opts=['-py3'])

setup(name='CDM',
      version='1.0',
      description='CoteDeMailles mesh library',
      ext_modules=[module1],
      py_modules=['CDM']
     )

这是全球项目结构

/
setup.py
|
|
src/
  |
  |
  cdm.i
  |
  CDM_Mesh.c
  |
  CDM_IOTools.c

为什么我不能只做import CDM?我不明白...

0 个答案:

没有答案