如何使用anaconda在pycharm中运行cython代码?

时间:2016-03-22 17:23:54

标签: pycharm cython anaconda

我在pycharm中使用anaconda,你可能知道,cython已默认安装在anaconda中。我的项目包含一些cython代码,我想在pycharm中运行。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

最简单的方法是使用pyximport:

你的main.py中的

添加:

import pyximport
pyximport.install(setup_args={'include_dirs': np.get_include()})
import cython_helper

将您的cython代码放在​​cython_helper.pyx文件中。

如果你在windows上运行它,在运行你的python代码之前你应该设置ENV变量(VS 2013):

SET VS90COMNTOOLS=%VS120COMNTOOLS%

答案 1 :(得分:1)

这个问题可能意味着两件事:

  1. 您有一个.pyx源文件,但您可以像处理任何旧的Python脚本一样对待它,并且您只想调用脚本的操作。

  2. 您的.pyx文件是一个扩展模块,在构建之后,您想从中导入。

  3. 您可以在另一个答案中使用pyximport,但另一个方便的工具是最近的runcython project。安装runcython后,对于上面的案例#1,您只需执行以下操作:

    runcython my_file.pyx
    
    从命令提示符

    ,将编译my_file.pyx,然后以与任何通用Python脚本相同的方式执行。任何顶级语句都将被执行,但为方便起见添加了一个额外的约定:如果您的脚本中恰好有一个名为main的函数,那么runcython将自动调用它,将其视为通用Python脚本的if __name__ == '__main__'部分。因此,如果你想做脚本和#34;这是一个好习惯。使用Cython,你应该制作所有的顶级定义,然后把所有的"工作"进入最后定义的名为main的顶级函数。

    请注意,通常的if __name__ == '__main__'技巧通常不会使用扩展模块,因为它依赖于python -m模块执行过程,该过程使用标准库{{1并且runpy要求来自已执行模块的代码对象 - 扩展模块通常不具备的代码对象。你会得到一个没有代码的对象"错误(例如,在从Cython构建和安装.so之后,如runpy,只需使用my_file.so)。

    对于案例#2,python -m my_file项目还提供runcython,这是对基于distutils的多文件方法的一种巨大简化,这种方法更为普遍。因此,一旦您使用makecython来使用代码,就可以将runcython用于合法的构建和部署部分。

    这仍然是一个新的图书馆,所以如果您正在谈论现实世界,生产依赖或其他什么,我不推荐它。对于这种情况,makecython仍然会更好。

    但对于您只想调用pyximport扩展模块的快速而肮脏的工作,就像它是一个通用模块一样,.pyx是一个方便的选择。