我在pycharm中使用anaconda,你可能知道,cython已默认安装在anaconda中。我的项目包含一些cython代码,我想在pycharm中运行。我怎么能这样做?
答案 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)
这个问题可能意味着两件事:
您有一个.pyx源文件,但您可以像处理任何旧的Python脚本一样对待它,并且您只想调用脚本的操作。
您的.pyx文件是一个扩展模块,在构建之后,您想从中导入。
您可以在另一个答案中使用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
是一个方便的选择。