Cythonize python3 код без использования подсказок / аннотаций типов - PullRequest
0 голосов
/ 07 августа 2020
• 1000 код неверен, и это вызывает проблемы при попытке запустить цитонизированный код.

Вот упрощенный пример:

a.py

def test_func(arg1) -> str:
    return {"hello": "world"}

Ошибка при попытка запустить код после запуска cythonize

TypeError: Expected unicode, got dict

Все работает нормально, если я удалю аннотацию -> str. Итак, есть ли способ указать cython игнорировать все аннотации?

Я знаю, что правильный способ решить эту проблему - исправить подсказки типа, но я пытаюсь найти альтернативное решение, пока исправляю аннотации .

Это мой setup.py

#cython: language_level=3
#cython: annotation_typing=False
from setuptools import setup
from setuptools.extension import Extension

from Cython.Build import cythonize
from Cython.Distutils import build_ext

setup(
    name="lib",
    ext_modules=cythonize(
        [
           Extension("pkg1.*", ["pkg1/*.py"], include_dirs = ["."], extra_compile_args = ['-O3']),
        ],
        build_dir="build",
        compiler_directives=dict(
        always_allow_keywords=True,
        language_level=3)),
    cmdclass=dict(
        build_ext=build_ext
    ),
    packages=["pkg1"]
)

Спасибо.

1 Ответ

1 голос
/ 07 августа 2020

Да - в документации . Просто используйте директиву annotation_typing. Например, в начале файла укажите:

# cython: annotation_typing = False
...