最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Cython 编译单参数函数的坑

    正文概述 掘金(小么小儿郎EL)   2020-12-04   465

    问题描述

    问题起因,某个项目通过 Cython 将代码打包后部署到测试服务器,某个函数报错:TypeError: test() tasks no keyword arguments

    本地复现,准备一个简单的函数以及一个 setup.py 用于打包

    ├── __init__.py
    ├── setup.py
    └── test.py
    

    test.py

    def test(uid):
        print(uid)
    
    
    if __name__ == "__main__":
        test(uid=321)
    

    setup.py

    from distutils.core import setup
    from Cython.Build import cythonize
    
    setup(
        ext_modules=cythonize('test.py',language_level=3,))
    
    

    执行结果如下

    Cython 编译单参数函数的坑

    问题解决

    突然想起来有个 PEP 提到限制参数只能为位置参数,但我函数里并没有限制,不应该出现这种情况。

    随后在群里寻求帮助,有个热心的老哥给了个链接:https://github.com/cython/cython/issues/2881

    Cython 编译单参数函数的坑

    大致意思就是说,这是 Cython 对单参数函数的“优化”,如果想要避免这种情况,需要指定编译参数。

    接下来按照 ISSUE 中提到的解决方案进行修改

    # setup.py
    from distutils.core import setup
    from Cython.Build import cythonize
    
    
    setup(
        ext_modules=cythonize(
            'test.py',
            language_level=3,
            compiler_directives={"always_allow_keywords": True}),
        )
    

    注意看第10行,这句话用来避免Cython对单参数函数的优化。

    修改完之后,再次编译运行,结果如下

    Cython 编译单参数函数的坑

    至此问题解决。

    总结

    你遇到的问题很可能别人也遇到过,千万不要闭门造车。在自己思考、搜索过后,仍不得其解的时候,勇敢地去问。

    被帮助后不要吝啬自己的感谢,更重要的是不要忘记把这份善意传递下去:你的一句话就很可能帮别人节省一天的时间,何乐而不为呢?

    参考资料

    1. github.com/cython/cyth…

    2. www.python.org/dev/peps/pe…

    3. docs.cython.org/en/latest/s…


    起源地下载网 » Cython 编译单参数函数的坑

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元