py2app导入打破了cython

时间:2013-03-31 04:40:28

标签: python cython py2app

我正在使用Cython文档中的基本“hello world”演示。它工作正常,除非我尝试在相同的setup.py文件中导入py2app:

import py2app
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

setup(
    cmdclass = {'build_ext': build_ext},
    ext_modules = [Extension("helloworld", ["helloworld.pyx"])]
)

只要我为Cython模块预生成.c文件,Py2app本身就可以正常工作。但如果我没有,那么build_ext会失败:

running build_ext
gcc-4.2 not found, using clang instead
building 'helloworld' extension
clang -fno-strict-aliasing -fno-common -dynamic -arch i386 -arch x86_64 -g -O2 -DNDEBUG -g -O3 -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c helloworld.c -o build/temp.macosx-10.6-intel-2.7/helloworld.o
clang: error: no such file or directory: 'helloworld.c'
clang: error: no input files
error: command 'clang' failed with exit status 1

如果我在setup.py中注释import py2appbuild_ext工作正常,我的编辑中缺少中间步骤:

...
gcc-4.2 not found, using clang instead
cythoning helloworld/helloworld.pyx to helloworld/helloworld.c
building 'helloworld' extension
...

那么关于打破Cython的py2app又是什么呢?我能做些什么呢?我希望我的项目只有一个setup.py。显然。

我从PyPI安装了Cython 0.18和py2app 0.7.2。我正在使用Mac OS X 10.8和python.org Python 2.7.3,而不是Apple的构建。

1 个答案:

答案 0 :(得分:1)

构建失败,因为py2app使用setuptools,而旧版本的setuptools(和distribute)与Cython不兼容。

解决方案是安装较新版本的setuptools或分发。