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

Dol*_*cci 11 python cython

我正在尝试运行Hadoopy,它有一个文件_main.pyx,并且import _main在__init__.py中找不到模块失败.

我试图在OS X w /标准python 2.7上运行它.

ick*_*fay 26

在尝试导入之前添加此代码_main:

import pyximport
pyximport.install()
Run Code Online (Sandbox Code Playgroud)

请注意,这pyximportCython的一部分,因此如果尚未安装,则必须安装.

  • 这仍然会导致我的结果是“没有属性{函数名称}”。我的 .pyx 是 cythonized python,我可以从中获取 .so 和 .c 文件。 (3认同)

tsv*_*iko 11

您需要确保已遵循所有步骤:

  1. 使用安装 Cython 包pip

    pip install Cython
    
    Run Code Online (Sandbox Code Playgroud)
  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):
     ...
    
    Run Code Online (Sandbox Code Playgroud)
  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]))
    
    Run Code Online (Sandbox Code Playgroud)
  4. 构建 Cython

    python3 setup.py build_ext --inplace
    
    Run Code Online (Sandbox Code Playgroud)
  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)
    
    Run Code Online (Sandbox Code Playgroud)
  6. 在同一目录中运行主脚本

    python run.py
    
    Run Code Online (Sandbox Code Playgroud)

  • 很好的答案;主脚本不在cython模块同一目录下如何解决?解决:添加到主脚本: import pyximport pyximport.install() (3认同)