在mac os上开始使用cython

时间:2014-02-13 11:28:51

标签: python c++ xcode macos cython

我在python中编写了一个简单的程序:

// 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?

1 个答案:

答案 0 :(得分:4)

您必须使用gcc标志告诉pyconfig.h编译器系统上-I文件的位置。您可以使用find程序找到它。

更简单的编译方法模块正在使用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)

使用已定义的Cython函数的<{1}}模块

main.py

通过发出以下命令编译Cython模块:

import split_urls

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

检查你的主要模块是否正在做它应该做的事情:

$ 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 ...