将外部c模块导入python

时间:2017-02-24 17:34:52

标签: python c python-2.7 python-3.x import

我试图运行一个python代码(test.py),该代码使用用C编写的外部模块(交换)。这是目录结构,

test.py
setup.py
swapped.so
ext_src/
    c_swapped.c
    c_swapped.h
    swapped.c

为了使用交换模块,我首先运行setup.py,配置如下:

from distutils.core import setup
from distutils.extension import Extension
from distutils.command import build_ext
import numpy as np
import sys

sys.argv[1:] = ['build_ext', '--inplace']

ext_modules = [Extension(
    name="swapped",
    sources=["ext_src/swapped.c", "ext_src/c_swapped.c"],
    language="c", include_dirs=[np.get_include()])
]

setup(
    name = 'RLScore',
    ext_modules = ext_modules,
    )

在test.py中,swapped导入为:

import swapped

所以当我在python 2.7.6上运行它们时,test.py工作正常,但在python 3.4.5上,我收到以下错误:

  import swapped
  File "swapped.pyx", line 2, in init rlscore.utilities.swapped (ext_src/swapped.c:3533)
System error parent module '' not loaded cannot perform relative import

我希望在python 3.4.5上运行此代码,那么有没有办法让交换模块工作?

非常感谢!

编辑:我将虚拟环境安装为python = 2.7,所以现在可以正常工作了。但是,如果有办法在不使用virtualenv的情况下运行包,我还是想学习。

0 个答案:

没有答案