如何在Python中从.pyx文件导入函数?
我正在尝试运行Hadoopy,这里面有一个文件叫做_main.pyx,但是在__init__.py里用import _main
的时候出现了找不到模块的错误。
我是在使用标准的Python 2.7的OS X系统上进行这个操作。
2 个回答
11
你需要确保你按照以下步骤操作:
使用
pip
安装 Cython 包pip install Cython
创建一个 Cython 文件
bbox.pyx
cimport cython import numpy as np cimport numpy as np DTYPE = np.float32 ctypedef np.float32_t DTYPE_t @cython.boundscheck(False) def compare_bboxes( np.ndarray[DTYPE_t, ndim=2] boxes1, np.ndarray[DTYPE_t, ndim=2] boxes2): ...
在同一个文件夹里创建
setup.py
from distutils.core import setup, Extension from Cython.Build import cythonize import numpy package = Extension('bbox', ['bbox.pyx'], include_dirs=[numpy.get_include()]) setup(ext_modules=cythonize([package]))
构建 Cython
python3 setup.py build_ext --inplace
在同一个文件夹里创建你的主 Python 脚本
run.py
import pyximport pyximport.install(setup_args={"script_args" : ["--verbose"]}) from bbox import compare_bboxes def main(args): boxes1 = args.boxes1 boxes2 = args.boxes2 result = compare_bboxes(boxes1, boxes2)
在同一个文件夹里运行你的主脚本
python run.py
52
在你尝试导入 _main
之前,先加上这段代码:
import pyximport
pyximport.install()
请注意,pyximport
是 Cython 的一部分,所以如果你还没有安装 Cython,就得先安装它。