Spyder中导入Cython模块失败:无法识别.pyx格式文件
Fixing "ModuleNotFoundError: No module named 'example1'" When Importing Cython Functions
别担心,这是Cython新手最常碰到的问题之一——.pyx文件本质是Cython的源文件,不能直接被Python解释器识别并导入,必须先把它编译成Python能识别的二进制扩展模块才行。下面是一步步的解决方法:
Step 1: Create a setup.py build script
首先你需要写一个setup.py文件,用来告诉Python怎么编译你的Cython代码。在和example1.pyx同一个文件夹下创建这个文件,内容如下:
from setuptools import setup from Cython.Build import cythonize setup( name="example1", ext_modules=cythonize("example1.pyx"), )
这个脚本的作用是调用Cython的cythonize工具,把.pyx文件转换成C语言源码,再进一步编译成Python可导入的扩展模块。
Step 2: Compile the Cython module
打开终端(或者在Spyder的IPython控制台里),切换到你的文件所在目录,运行以下命令:
python setup.py build_ext --inplace
build_ext:告诉setuptools要构建C扩展模块--inplace:把编译好的模块直接放在当前目录下,这样Python导入时能直接找到它
运行完这个命令后,你会看到文件夹里多了几个文件:
example1.c:从Cython源码生成的C语言文件example1.<your-platform>.so(Linux/macOS)或者example1.pyd(Windows):这就是Python能识别的二进制模块文件
Step 3: Test the import again
现在回到你的Python脚本,重新运行from example1 import myfunction1,应该就能成功导入了。如果还是不行,试试这几个小技巧:
- 确保你的Python脚本和编译后的
.so/.pyd文件在同一个目录 - 如果用Spyder,可能需要重启一下IPython内核(点击控制台右上角的重启按钮),让它重新加载新生成的模块
- 检查有没有安装Cython和setuptools:如果没装,先运行
pip install cython setuptools
内容的提问来源于stack exchange,提问作者Sherry
相关产品推荐
相关产品推荐

