我有一个名为
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
导入依赖项有关,但我不确定如何修复它。
我发现了我的错误。在尝试了一百万件事之后,我认为这与我的 setup.py 或我的源代码无关。存在三个问题:
setup.py 需要位于父目录中才能正常工作。
空的
__init__.py
文件需要位于子目录中。
家长
|--Neuronal_Cascades_Base1
| |--neuron.pyx
| |--__init__.py
|--setup.py
当您使用 Jupiter 笔记本下拉菜单上的“另存为”保存
.ipynb
文件时,neuron.pyx
会创建一个看起来很奇怪的文件,并且还有一堆其他不必要的元数据。因此,删除 neuron.pyx
中的所有内容并简单地将原始 cython 源代码复制粘贴到 neuron.pyx
中解决了问题。