2016-01-05 45 views
0

我試圖做一個用Cython 「Hello World」 程序,下面這個教程http://docs.cython.org/src/tutorial/cython_tutorial.html#cython-hello-world如何在Cython的setup.py中指定Python 3源代碼?

我創建helloworld.pyx

print("Hello World") 

和setup.py:

from distutils.core import setup 
from Cython.Build import cythonize 

setup(
    ext_modules = cythonize("helloworld.pyx") 
) 

哪有我改變了setup.py來指定我的源代碼是Python 3,而不是像教程中那樣是Python 2?如果我從命令行調用「cython」命令,它將接受-3選項。但如果像教程中所示的那樣編譯python setup.py build_ext --inplace,我該如何指定Python 3源代碼?對於Hello World程序來說可能並不重要,但在我開始將Cython用於實際項目時很重要。

非常感謝!

+1

您是否嘗試調用Python 3可執行文件?在* nix系統上,通常有一個名爲'python3'的可執行文件。 – jpmc26

+0

是的。 Python 3是我擁有的唯一Python版本。我在Windows上。 Cython是一個解析Python源文件並生成C的Python模塊。我需要告訴Cython它解析的源代碼是Python 3。 – rsteward

回答

1

它做的正確的事情,如果你只需要調用setup.py與Python 3

使用測試程序

print('hello',5,end='**\n') # Python3 syntax, breaks on Python2 

在其上運行用Cython不指定3給出

Error compiling Cython file: 
------------------------------------------------------------ 
... 
print('hello',5,end='**\n')    ^
------------------------------------------------------------ 

print_something.pyx:1:19: Expected ')', found '=' 

而使用python3調用的setup.py編譯工作可以正確地構建模塊。

0

official documentation on compilation,Python語言水平可以使用指令通過在文件頂部的特殊頭註釋規定,像這樣:

#!python 
#cython: language_level=3 

似乎沒有成爲一個辦法在setup.py中指定。所以如果你有很多Cython文件,你必須將編譯指令添加到每個文件中。雖然迄今爲止我遇到的唯一需要這個指令的情況是print()和你的示例一樣,並且我廣泛使用了Cython。