Articles of cython

在集群上使用Python,Cython和GSL

我希望在集群计算系统上运行我的Python程序。 由于在集群的每个节点上都没有root访问权限,我需要将Python和我的模块安装在本地目录中,并从那里运行我的代码。 为了节省时间,我可以在其中一个节点上执行本地Python构build,将其tar,并将tar tar保存在代理服务器上。 然后,当我想在其余的节点上运行我的代码时,我只需要将焦油的Python解开,然后运行我的程序。 所以基本上我只需要一次构buildPython,然后可以在集群上重复使用它; 我在集群上运行的代码如下所示: #!/bin/bash wget www.proxyserver.Local_Python_Build.tgz tar xzf Local_Python_Build.tgz ./Local_Python_Build/bin/python my_python_code.py 我遇到了一个重大问题。 首先,我的主代码使用我写的一些需要GSL的Cython程序。 当我进行Python的初始安装时,我也做了GSL的本地构build,以及编译Cython代码(全部包含在tar中)。 我已经检查过,确保所有内容在构build完成后都正确运行,但是一旦我在集群上提交代码,代码就无法运行。 我不断收到以下错误: ImportError: libgsl.so.0: cannot open shared object file: No such file or directory 现在,我已经尝试将path添加到libgsl.so.0位于LD_LIBRARY_PATH中的目录,但这不起作用; 即 export LD_LIBRARY_PATH=path/where/libgsl/is 我担心每次运行我的代码时都需要构buildGSL; 即运行下面的代码: #!/bin/bash wget www.proxyserver.Local_Python_Build.tgz tar xzf Local_Python_Build.tgz install GSL Compile Cython Code ./Local_Python_Build/bin/python my_python_code.py 这显然会增加我的运行时间,我希望避免。 任何想法? 计算群集运行Linux。 谢谢!

Cython中的Hello World程序在安装python-dev和链接库之后失败

我创build了一个简单的hello世界程序,并尝试使用gcc执行生成的C程序,但无论我做什么,我都会得到一个未定义引用的大量列表。 有很多类似的问题,但他们都说要安装python-dev(或它的一些变种)或添加链接和加载库的标志,但我已经尝试了这两个选项。 hello.py def main(): print "Hello, World!" if __name__ == "__main__": main() 我运行: cython –embed hello.py 然后我尝试运行一些gcc的变体forms: gcc -I /usr/include/python2.7/ -L /usr/lib/python2.7 -lpython2.7 hello.c -o hello 我得到“Python.h”文件未find或以下错误消息: /tmp/ccxOQlAW.o: In function `__Pyx_PyObject_GetAttrStr': hello.c:(.text+0x95): undefined reference to `PyObject_GetAttr' /tmp/ccxOQlAW.o: In function `__pyx_pf_5hello_main': hello.c:(.text+0x149): undefined reference to `_Py_NoneStruct' hello.c:(.text+0x150): undefined reference to `_Py_NoneStruct' hello.c:(.text+0x15b): undefined reference to […]

iTunes的共享库中的PyObject_Call()出现分段错误

我正在试用iTunes SDK和Cython。 DLL的入口似乎工作,但使用任何“真正的Python”导致iTunes崩溃。 下面的代码编译得很好,插件的DLL是由iTunes成功加载。 cimport libc.stdio as stdio cdef extern from "iTunesAPI/iTunesAPI.h": ctypedef int OSType ctypedef int OSStatus ctypedef struct PluginMessageInfo: pass int unimpErr cdef public OSStatus iTunesPluginMain( OSType message, PluginMessageInfo* messageInfo, void* refCon ): cdef stdio.FILE* fl = stdio.fopen('C:/itunes_cyplugin_feedback.txt', 'wb') return unimpErr 但是添加Pythonexpression式会导致iTunes崩溃,例如: # … cdef public OSStatus iTunesPluginMain( OSType message, PluginMessageInfo* messageInfo, void* […]

在Python cythonize期间“Intel \ iCLS意外”错误

我一直能够用Python 2.7在我的Windows 7(64位)机器上对代码进行集成。 但是,我迟到了,我得到以下错误 error: \Intel\iCLS was unexpected at this time. 在这个主题上的searchbuild议与蝙蝠脚本中的空间和其他这样的字符的问题。 然而,这发生在非常基本的hello世界的例子 ,以及我试图cythonize如下: [cmd_prompt] C:\MyScripts\Python\Cython\hello_world>python setup.py build_ext –inplace Compiling helloworld.py because it changed. [1/1] Cythonizing helloworld.py running build_ext building 'helloworld' extension error: \Intel\iCLS was unexpected at this time. 更新到cython 0.24没有帮助。 [Update 1]:我发现我可以使用cython -a helloworld.py来对代码进行cython -a helloworld.py 。 所以我猜测这是使用distutils cythonize有这个问题。 我还将成功的cythonize生成的.c文件与失败的.c文件进行了比较,发现它们在开头只有不同。 失败的版本有这个在顶部 /* BEGIN: Cython […]

15秒的空闲延迟加载Windows本机Python模块

我正在使用Cython在Windows上开发本地Python模块(DLL或PYD)。 每次我重build它,第一次加载块15秒,在此期间,CPU和磁盘完全空闲。 后续尝试正常运行,直到我重新模块再次。 Python的Cygwin和MSYS2版本都会发生这种情况。

使用cykthon编译带有dask或joblib多处理的可执行文件导致错误

我正在转换一些串行处理的python作业与dask或joblib多处理。 可悲的是我需要在Windows上工作。 当从IPython或从命令行运行python文件与python一切运行良好。 当用cython编译一个可执行文件时,它不再运行正常:一步一步越来越多的进程(无限制和大于请求进程的数量)得到startet并阻止我的系统。 它不知何故感觉像多处理炸弹 – 但当然, if __name__=="__main__:"具有控制块 – 通过从命令行python调用罚款批准。 我的cython调用是cython –embed –verbose –annotate THECODE.PY ,我用gcc -time -municode -DMS_WIN64 -mthreads -Wall -O -I"PATH_TO_\include" -L"PATH_TO_\libs" THECODE.c -lpython36 -o THECODE编译gcc -time -municode -DMS_WIN64 -mthreads -Wall -O -I"PATH_TO_\include" -L"PATH_TO_\libs" THECODE.c -lpython36 -o THECODE导致一个Windows可执行文件THECODE.exe 。 与其他(单一处理)运行良好的代码。 这个问题对于dask和joblib来说似乎是一样的(这可能意味着,dask可以像joblib一样工作)。 有什么build议么? 对于那些对mcve感兴趣的人 :只要从Multiprocessing Bomb获得第一个代码,然后使用上面的cython命令编译代码,就会导致一个可执行文件冒用你的系统。 (我刚刚试过:-)) 我只是通过在代码示例中添加一行来显示__name__ : import multiprocessing def worker(): […]

向cython代码添加打印语句会影响输出

我有一个用Python和Cython组合编写的应用程序。 我最近添加了一个新的function和testing到这个应用程序。 testing通过我的本地机器(macbook),但是当我推送appveyor(一个Windows CI服务)testing失败。 这本身并不奇怪。 当我将打印语句添加到我的Cython代码中,试图查看在appveyor上运行时发生的情况时,testing不再失败。 这是令人沮丧的,因为在appveyor上testing失败时,我无法弄清楚发生了什么事情。 这也只是令人困惑,因为它违反了我对Python和Cython如何工作的理解。 我的代码很复杂,我没有合理的方式来分享这个现象的例子。 但是,我正在寻找可能发生的原因。 如何以及在什么情况下,Cython代码中的打印语句对其他计算有影响?

为什么Windows上的Cython扩展取决于pythonXX.dll,而不是MacOSX?

我在windows和mac上构build了相同的库(下面的示例来自rfoo),并且mac版本只具有系统依赖关系 $ otool -L marsh.so marsh.so: /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0) 而在Windows上,这取决于python的DLL >dumpbin /dependents marsh.pyd Microsoft (R) COFF/PE Dumper Version 12.00.31101.0 Copyright (C) Microsoft Corporation. All rights reserved. Dump of file marsh.pyd File Type: DLL Image has the following dependencies: python25.dll MSVCR120.dll KERNEL32.dll 我不知道这是否是一个实际的select,不是真的由于Windows,或者如果有什么特定于Windows需要这个。 上下文:我使用它来从Ableton Live中的embedded解释器中加载python扩展,它使用旧的python版本; 但最糟糕的是,python没有加载为一个库,它是静态链接在软件内。 在Mac上,这不是一个问题,我仍然可以加载扩展。 在Windows上,我不能,因为我必须链接到python25.dll,但在加载时,它试图再次初始化解释器,这会给出一个错误,因为该DLL不被Ableton Live使用。 我想知道是否有一些希望在Windows上工作。

如何运行cython命令行选项

我最近开始使用cython,现在想用-a标签来显示http://docs.cython.org/src/quickstart/cythonize.html#determining-where-to-add-types来查看我的代码是如何这样做。 不过要使用这个,我需要访问cython命令行程序。 我的问题是如何做到这一点。 我正在运行Windows,并试图将C:\ Python32 \ Lib \ site-packages \ Cython添加到我的path环境variables以及在命令行上键入cython,但是这不起作用。 感谢您的时间

Cython runtests.py:no属性'may_share_memory'

我在Windows上安装了cython(运行python(x,y)),从http://cython.org/下载并运行 python setup.py install 在安装目录中。 安装文件夹中有一个testmodule“runtests.py”,它提供了错误信息 may_share_memory = multiarray.may_share_memory AttributeError: 'module' object has no attribute 'may_share_memory' 我怎样才能让错误消失? 更新:看来我的numpy版本是这个错误的原因。 我再次从python(x,y)网站( https://code.google.com/p/pythonxy/wiki/StandardPlugins )下载了numpy,错误消失了。