2014-02-13 117 views
2

我在Python寫了一個簡單的程序:開始使用Mac OS上用Cython

// main.py 
import re 
links = re.findall('(https?://\S+)', 'http://google.pl http://youtube.com') 
print(links) 

然後我執行此:

cython main.py 

它生成的文件:main.c中 然後我嘗試這樣:

gcc main.c 

而且我有一個錯誤:

main.c:8:10: fatal error: 'pyconfig.h' file not found 
#include "pyconfig.h" 
     ^
1 error generated. 

如何編譯python到c?如何在mac上開始使用xcode的cython?

回答

4

您必須使用-I標誌告訴gcc編譯器,系統中的pyconfig.h文件在哪裏。您可以使用find程序找到它。

A 更簡單的編譯方式模塊使用的是setup.py模塊。 Cython提供了一個cythonize函數,該函數爲.pyx模塊啓動此過程。

您缺少的另一點是:Cython文件通常定義從主Python模塊使用的輔助函數。

假設你有以下設置爲顯示目錄和文件:

cython-start/ 
├── main.py 
├── setup.py 
└── split_urls.pyx 

setup.py的內容是

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

setup(name="My first Cython app", 
     ext_modules=cythonize('split_urls.pyx'), # accepts a glob pattern 
    ) 

split_urls.pyx文件的內容是

import re 

def do_split(links): 
    return re.findall('(https?://\S+)', links) 

它是main.py模塊whi CH 使用已定義的用Cython功能

import split_urls 

URLS = 'http://google.pl http://youtube.com' 
print split_urls.do_split(URLS) 

發出編譯用Cython模塊:

$ python setup.py build_ext --inplace 
Cythonizing split_urls.pyx 
running build_ext 
building 'split_urls' extension 
creating build 
creating build/temp.macosx-10.9-x86_64-2.7 
... compiler output ... 

,並檢查您的主要模塊是做什麼是應該做的事:

$ python main.py 
['http://google.pl', 'http://youtube.com'] 
+0

或者,您可以將'main.py'重命名爲'main.pyx',然後按照logc的說法創建並運行'setup.py'。然後你可以在控制檯執行'import main'或者在shell中執行'python -c「import main'''。 – richizy