如何在Python中从.pyx文件导入函数?

28 投票
2 回答
70320 浏览
提问于 2025-04-17 02:48

我正在尝试运行Hadoopy,这里面有一个文件叫做_main.pyx,但是在__init__.py里用import _main的时候出现了找不到模块的错误。

我是在使用标准的Python 2.7的OS X系统上进行这个操作。

2 个回答

11

你需要确保你按照以下步骤操作:

  1. 使用 pip 安装 Cython 包

    pip install Cython
    
  2. 创建一个 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):
     ...
    
  3. 同一个文件夹里创建 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]))
    
  4. 构建 Cython

    python3 setup.py build_ext --inplace
    
  5. 同一个文件夹里创建你的主 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)
    
  6. 同一个文件夹里运行你的主脚本

    python run.py
    
52

在你尝试导入 _main 之前,先加上这段代码:

import pyximport
pyximport.install()

请注意,pyximportCython 的一部分,所以如果你还没有安装 Cython,就得先安装它。

撰写回答