Я работаю с директивами компилятора для Cython (http://docs.cython.org/en/latest/src/reference/compilation.html#globally).
$ cat temp.pyx
# cython: language_level=3
print("abc", "def", sep=" ,") # invalid in python 2
Компиляция:
$ cythonize -i world_dep.pyx
Error compiling Cython file:
------------------------------------------------------------
...
# cython: language_level=3
print("abc", "def", sep=" ,") ^
------------------------------------------------------------
temp.pyx:4:23: Expected ')', found '='
Итак, директива language_level не соблюдается. Таким образом, cythonize заканчивается использованием семантики Python 2, и выдается ошибка, так как приведенный выше оператор печати недопустим в Python 2.
Однако, включение любого оператора Python делает эту работу:
$ cat temp.pyx
# cython: language_level=3
import os
print("abc", "def", sep=" ,")
Компиляция и выполнение:
$ cythonize -i temp.pyx; python -c "import temp"
abc, def
Есть идеи, как оператор import заставляет language_level быть уважаемым?
Я поднял эту же проблему в репозитории Cython GitHub?