【发布时间】:2020-12-18 01:43:24
【问题描述】:
我在 Cython 语法中有一个名为 neuron 的类,它使用魔术 (%%cython) 与 Jupyter 内联完美配合:
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 导入依赖项有关,但我不确定如何修复它。
【问题讨论】:
-
cimportnumpy` 通常会要求您在 setup.py 中设置 Numpy 标头的路径,但这应该会给出明显的错误消息并且不会生成 .so 文件。您是否尝试过将模块导入为import Neutronal_Cascades_cython_Base1并使用dir来检查可用的模块? -
当我对
import Neutronal_Cascades_cython_Base1执行dir时,我得到了['__builtins__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '__test__']。不确定这到底是什么意思。你认为这是我的语法吗? @大卫W -
我认为
Neuronal_Cascadescython_Base2可能是相关的,因为单独导入任何一个模块都会给我同样的错误,并且由于两个模块的依赖关系不同,我认为它可能与复制有关。 @ead -
可能值得打印
Neutronal_Cascades_cython_Base1.__file__并检查它是否真的是您认为的生成的 .so 文件。 -
是的,确实是
'/Users/bengieru/Neuronal_Cascades/Cython/Neuronal_Cascades_cython_Base1.cpython-37m-darwin.so'@DavidW
标签: cython importerror cythonize