导入错误:无法导入 Cython 模块

问题描述 投票:0回答:1

我有一个名为

neuron
的 Cython 语法类,它可以使用魔法与 Jupyter 内联完美配合
(%%cython)
:

cdef class neuron: pass

我正在尝试对其进行 cythonize,以便我可以将其导入集群并在 conda 环境中使用 Jupyter 运行更大规模的实验。我的

setup.py
文件如下所示:

from setuptools import setup, Extension
from Cython.Build import cythonize

extensions = [
Extension("Neuronal_Cascades_cython_Base1", ["Neuronal_Cascades_cython_Base1.pyx"]),
]
setup(
    name="Neuronal_Cascades_cython_Base",
    ext_modules=cythonize(extensions),
)

Cythonize 工作正常,并且

.so
.c
文件创建得很好,没有任何错误。但是当我在 Jupyter Notebook 中导入这两个模块时,出现导入错误:

---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-3-639e2d302e82> in <module>
      1 import matplotlib.pyplot as plt
      2 import numpy as np
----> 3 from Neuronal_Cascades_cython_Base1 import neuron
      4 import os
      5 import pickle

ImportError: cannot import name 'neuron' from 'Neuronal_Cascades_cython_Base1'     (/Users/bengieru/Neuronal_Cascades/Cython/Neuronal_Cascades_cython_Base1.cpython-37m-darwin.so)

谁能告诉我我做错了什么?我觉得它可能与

setup.py
导入依赖项有关,但我不确定如何修复它。

cython importerror cythonize
1个回答
1
投票

我发现了我的错误。在尝试了一百万件事之后,我认为这与我的 setup.py 或我的源代码无关。存在三个问题:

  1. setup.py 需要位于父目录中才能正常工作。

  2. 空的

    __init__.py
    文件需要位于子目录中。

    家长

    |--Neuronal_Cascades_Base1
    |   |--neuron.pyx
    |   |--__init__.py
    |--setup.py
    
  3. 当您使用 Jupiter 笔记本下拉菜单上的“另存为”保存

    .ipynb
    文件时,
    neuron.pyx
    会创建一个看起来很奇怪的文件,并且还有一堆其他不必要的元数据。因此,删除
    neuron.pyx
    中的所有内容并简单地将原始 cython 源代码复制粘贴到
    neuron.pyx
    中解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.