Tag: distutils

在Windows中使用C绑定构建Python包(VC90)会导致LNK1181致命错误

我正在尝试构建一个绑定到C库(libspotify)的Python包(pyspotify)。 我正在使用Python 2.7.5并为某些必需的命令行工具安装了VS2008 Express。 当我从命令提示符(具有管理员权限)调用python setup.py build ,我得到以下输出: running build running build_py running build_ext building ‘spotify._spotify’ extension 然后~18个,一个包中的每个.c文件: c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -Isrc -Ic:\Python\Python27\include -Ic:\Python\Python27\PC /Tcsrc\module.c /Fobuild\temp.win32-2.7\Release\src\module.obj module.c 然后是showstopper: c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\link.exe /DLL /nologo /INCREMENTAL:NO /LIBPATH:c:\Python\Python27\libs /LIBPATH:c:\Python\Python27\PCb uild spotify.lib /EXPORT:init_spotify build\temp.win32-2.7\Release\src\module.ob j build\temp.win32-2.7\Release\src\session.obj […]

用C头文件编译Cython错误

所以我试图用Cython包装一些C代码。 我阅读了阅读应用Cython的教程来做这个( 1,2 ),但这些教程没有说明如何编译代码一旦你用Cython包装它,所以我有一个错误说它找不到我的C码。 首先,我的cython脚本(“calcRMSD.pyx”): import numpy as np cimport numpy as np cdef extern from “rsmd.h”: double rmsd(int n, double* x, double* y) #rest of the code ommited 我试图包装的C代码(“rmsd.h”): #include #include #include #include extern “C” { // svd from lapack void dgesvd_(char*,char*,int*,int*,double*,int*,double*,double*,int*,double*, int*,double*,int*,int*); } double rmsd(int n, double* x, double* y) { //code omitted […]

我怎样才能从Python C代码断言?

我正在用C编写Python类,我想在我的调试代码中加入断言。 assert.h适合我。 这只会放入调试编译中,因此不会有断言失败影响Python代码的用户*。 我试图划分我的’库’代码(它应该与链接到Python的代码分开),所以我可以从其他C代码中使用它。 因此,我的Python方法是我的纯C代码的简洁包装。 所以我不能在我的’库’代码中执行此操作: if (black == white) { PyErr_SetString(PyExc_RuntimeError, “Remap failed”); } 因为这会使用Python污染我的纯C代码。 它也比简单的更丑陋 assert(black != white); 我相信Distutils编译器总是设置NDEBUG ,这意味着即使在调试版本中我也不能使用assert.h 。 Mac OS和Linux。 救命! *我听过一个论点反对在Python中调用C代码断言。

如何将自定义C(它本身需要特殊的链接选项进行编译)与Cython链接?

所以我正在尝试创建一个使用我编写的.c文件的Cython模块。 该.c文件需要一个特殊的链接选项(要编译它,我需​​要gcc -o mycode mycode.c -lfftw3f )。 我可能只是在Cython中重写我的.c文件,但我想知道如何做到这一点。 我正在使用fftw3,并且在编译时,如果你想使用浮点版本,你需要在.c文件中使用-lfftw3f选项#include 。 我的setup.py如下所示: from distutils.core import setup from distutils.extension import Extension from Cython.Distutils import build_ext sourcefiles = [‘mycode_caller.pyx’, ‘mycode.c’] ext_modules = [Extension(“myext”, sourcefiles, libraries=[‘fttw3f’])] setup( name = ‘My Extension’, cmdclass = {‘build_ext’: build_ext}, ext_modules = ext_modules ) 我创建了一个名为mycode.h的头文件,如下所示,并包含transform()函数的原型,该函数在mycode.c定义: #include #include #ifndef FOURIER_H_INCLUDED #define FOURIER_H_INCLUDED fftwf_complex** transform(float** in, […]

尝试构建基本的python扩展示例失败(windows)

我在Win7 x64机器上运行Python 2.6和Visual Studio 2008。 当我尝试在python 2.6源代码分发中找到的c“example_nt”中构建基本的python扩展示例时,它会失败: python setup.py build 这导致: running build running build_ext building ‘aspell’ extension Traceback (most recent call last): File “setup.py”, line 7, in ext_modules = [module1]) File “C:\Python26\lib\distutils\core.py”, line 152, in setup dist.run_commands() File “C:\Python26\lib\distutils\dist.py”, line 975, in run_commands self.run_command(cmd) File “C:\Python26\lib\distutils\dist.py”, line 995, in run_command cmd_obj.run() File “C:\Python26\lib\distutils\command\build.py”, line […]

Cython和fortran – 如何在没有f2py的情况下一起编译

最终更新 这个问题是关于如何编写一个setup.py ,它将编译一个直接访问FORTRAN代码的cython模块,就像C一样。 这是一个相当漫长而艰巨的解决方案之旅,但下面包含了完整的混乱。 原始问题 我有一个扩展,它是一个Cython文件,它设置一些堆内存并将其传递给fortran代码,以及一个fortran文件,这是一个古老的模块,我想避免重新实现,如果可以的话。 .pyx文件可以很好地编译为C,但是cython编译器会对.f90文件进行.f90 ,并出现以下错误: $ python setup.py build_ext –inplace running build_ext cythoning delaunay/__init__.pyx to delaunay/__init__.c building ‘delaunay’ extension error: unknown file type ‘.f90’ (from ‘delaunay/stripack.f90’) 这是我的安装文件(上半部分): from distutils.core import setup, Extension from Cython.Distutils import build_ext ext_modules = [ Extension(“delaunay”, sources=[“delaunay/__init__.pyx”, “delaunay/stripack.f90”]) ] setup( cmdclass = {‘build_ext’: build_ext}, ext_modules = ext_modules, … […]