【发布时间】:2020-10-27 22:33:52
【问题描述】:
我尝试编译fizzbuzz.c,以便通过python 导入它。对于构建fizzbuzz.c,我使用了python setup.py build_ext -i。
构建后,我尝试导入fizzbuzz.c,但出现以下错误。
我该如何解决这个问题?
错误
>>> import fizzbuzz
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: dynamic module does not define init function (initfizzbuzz)
fizzbuzz.c
#include <stdio.h>
void fizzbuzz(int n){
for (int i=1; i <= n; i++){
if (i % 3 == 0 && i % 5 ==0){
printf("fizzbuzz %d \n", i);
}
else if (i % 3 == 0){
printf("fizz %d \n", i);
}
else if(i % 5 == 0){
printf("buzz %d \n", i);
}
}
}
setup.py
from distutils.core import setup, Extension
module = Extension('fizzbuzz', ['fizzbuzz.c'])
setup(
name='fizzbuzz',
version='1.0',
ext_modules=[module],
)
【问题讨论】:
-
这远不是一个合适的 Python 扩展模块。
-
我建议你先阅读C-API tutorial。
-
对于后代,如果您在同一目录中有两个文件
fizzbuzz.so和一个(正确编写的 ctypes 包装器)fizzbuzz.py,并且您尝试使用import fizzbuzz,Python 似乎更喜欢@987654333 @,它也会产生这个错误信息。 -
将 C 扩展从 python 2 移植到 3:docs.python.org/3/howto/cporting.html
标签: python c python-c-api