You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python脚本经Cython编译后运行报TypeError,求解决方案

解决Typer脚本Cython编译的两类问题

一、消除language_level未设置的FutureWarning

直接在Cython编译阶段指定Python语言级别,有两种方式:

  • 编译命令中添加参数:
    cython main.py --embed -3
    
  • 在Python脚本开头添加Cython专用注释:
    # cython: language_level=3
    

二、修复二进制运行时的TypeError: Expected str, got ArgumentInfo

该报错源于Cython静态类型处理与Typer的Argument装饰器返回值不兼容,可通过以下方案解决:

方案1:调整Typer参数写法

移除变量的类型注解,转而在Argument内指定类型:

key_id = typer.Argument(None, type=str)

方案2:使用字符串形式的类型注解

保留类型注解但改用字符串格式,绕过Cython的静态类型检查:

key_id: 'str' = typer.Argument(None)

方案3:修改Cython编译配置

通过setup.py禁用严格类型检查,示例配置如下:

from setuptools import setup
from Cython.Build import cythonize

setup(
    ext_modules=cythonize(
        "main.py",
        compiler_directives={"language_level": 3, "annotation_typing": False}
    )
)

执行编译命令:

python setup.py build_ext --inplace

再用GCC链接生成二进制文件。

方案4:升级依赖版本

确保Cython(≥0.29.30)和Typer(≥0.6.0)为最新稳定版,新版本可能已修复此类兼容性问题。

完整编译流程示例

  1. Cython转C文件:
cython main.py --embed -3
  1. GCC编译二进制(替换为你的Python版本路径):
gcc -Os -I/usr/include/python3.10 -o main main.c -lpython3.10 -lpthread -lm -lutil -ldl

内容的提问来源于stack exchange,提问作者altoensodio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 10:33:28