我试图运行一个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的情况下运行包,我还是想学习。