背景
在项目后期,需要将产品进行发布,为了保护代码安全,最终选定将代码文件利用Cython编译成C的扩展。
有关Cython的介绍在官网上也有详细的说明。
这里只记录几个问题。
问题
不同包内模块同名问题
在复杂的包层次结构中,很容易出现相同的模块名,这种问题,在python中也是一个比较常见的问题,我在之前的一个博客上Python的import有所介绍。
这种问题在使用Cython编译后,这种问题暴露的更加明显。
所以如果有使用Cython编译复杂结构的模块时,一定要理清楚导入的逻辑,推荐使用import
,尽量节制使用from...import
当然如果结构没那么复杂,可以考虑给模块命名不一样。
函数的参数问题
在使用Cython编译后,有的函数被调用时,会爆出一个无参数的TypeError:
func() takes no keyword arguments
在Bottle框架(一个Web框架)的issue中有人也遇到这种问题。
通过这里给出的方法我们对报出Error的方法进行修改。
例如:
# 原来
def sum(a,b): pass
# 修改后
def sum(a=None, b=None): pass
这样可以将问题解决。
这个问题在Cython的issue中也有提到。
相关的知识在Python的文档解析参数和生成值中也有部分介绍。
网友评论