簡體   English   中英

Cython/Python 比較無效的語法錯誤

[英]Cython/Python comparison invalid syntax error

我想在時間執行方面將 Python 與 Cython 進行比較,所以我寫了兩個文件:

文件

def factorial(n):
    if n >= 1:
        return n*factorial(n - 1)
    return 1

fastfac.pyx

cpdef long fastfactorial(long n):
    if n>= 1:
        return n*fastfactorial(n - 1)
    return 1

然后我寫了一個安裝文件:

安裝程序.py

from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize('fastfac.pyx'))

從 Powershell 我執行了兩個命令:

pip install Cython
python setup.py build_ext --inplace

從第二個命令我收到以下消息:

Compiling fastfac.pyx because it changed.
[1/1] Cythonizing fastfac.pyx
C:\Users\.....\venv\lib\site-packages\Cython\Compiler\Main.py:369: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: C:\Users\.....\fastfac.pyx
  tree = Parsing.p_module(s, pxd, full_module_name)
running build_ext
building 'fastfac' extension
error: Unable to find vcvarsall.bat

但是我試圖進行比較,所以我寫了文件:

比較.py

from fastfac import fastfactorial
from fac import factorial
from timeit import timeit

print(timeit('fastfactorial(20)', globals = globals(), number = 10000))
print(timeit('factorial(20)', globals = globals(), number = 10000))

當我運行它時,我收到以下錯誤消息:

Traceback (most recent call last):
  File "C:/Users/...../comparison.py", line 1, in <module>
    from fastfac import fastfactorial
ModuleNotFoundError: No module named 'fastfac'

似乎在文件python.pyx中,定義cpdef long fastfactorial(long n)未被識別為常規 function 定義,而是作為語法錯誤; 事實上,如果我嘗試運行該文件,我會收到錯誤消息:

  File "C:/Users/...../fastfac.pyx", line 1
    cpdef long fastfactorial(long n):
             ^
SyntaxError: invalid syntax

我該如何解決? 如何在 a.pyx 文件中正確定義cpdef 我錯過了什么?

問題不在於您對 fastfactorial 的定義,而是您的 setup.py 退出並出現錯誤,並且可能沒有將 fastfac 編譯到 c 庫中。 通常,您應該始終修復此類錯誤。

您的錯誤似乎正在發生,因為您沒有安裝 Microsoft Visual C++ 編譯器。 您可以按照答案中的說明選擇要安裝的 Visual C++ 版本。

您還會收到有關未設置 language_level 的警告。 您也不應該忽略警告,因此值得在 setup.py 中明確說明級別。

setup(ext_modules=cythonize('fastfac.pyx'), language_level=3)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM