【问题标题】:How do I import function from .pyx file in python?如何从 python 中的 .pyx 文件导入函数?
【发布时间】:2011-11-22 10:55:03
【问题描述】:

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

我正在尝试在带有标准 python 2.7 的 OS X 上运行它。

【问题讨论】:

    标签: python cython


    【解决方案1】:

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

    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
      

    【讨论】:

      【解决方案2】:

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

      import pyximport
      pyximport.install()
      

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

      【讨论】:

      • 我没有安装那个模块。我从prescod.net/pyximport 下载了一些文件,然后它说我需要 Pyrex.Distutils。在我继续挖掘库之前,先检查一下我是否遗漏了一些明显的东西(即安装 cython 或其他一些库/应用程序/包)
      • @dolan:是的,你需要 Cython。我假设你已经安装了它,因为你的问题被标记了。
      • 要安装 Cython,您有 3 个选项:1. 运行 pip install Cython 或 2. 转到 cython.org.,下载并运行 python setup.py install 或 3. 运行 pip install Cython --install-option="--no-cython-compile"
      • 这对我来说仍然是has no attribute {function name}。我的.pyx 是cythonized python,我可以从中获取.so.c 文件。
      • 嘿@mLstudent33,你的问题解决了吗?
      猜你喜欢
      • 1970-01-01
      • 2021-10-06
      • 2021-12-14
      • 1970-01-01
      • 2016-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      相关资源
      最近更新 更多