【问题标题】:Setup of PyCharm for Cython为 Cython 设置 PyCharm
【发布时间】:2016-08-21 04:35:21
【问题描述】:

我看到PyCharm supports Cython。

我总是可以在终端中编译和运行,但我想知道在 PyCharm 中是否有办法做到这一点。在链接中它说:“编译是使用外部工具完成的。首选的构建系统(Makefile、setup.py 等)应该配置为外部工具。”我想知道如何进行此配置。非常感谢 PyCharm 中使用 Cython 的 Hello World 小示例。

谢谢

【问题讨论】:

    标签: pycharm cython


    【解决方案1】:

    在这里回答我自己的问题:

    假设我们有函数fib.pyx:

    def fib(n):
    """Print the Fibonacci series up to n."""
    a, b = 0, 1
    while b < n:
        print b,
        a, b = b, a + b
    

    有两种编译和运行的方法

    1. 使用安装文件。制作文件 setup.py:

      from distutils.core import setup
      from Cython.Build import cythonize
      
      ext_options = {"compiler_directives": {"profile": True}, "annotate": True}
      setup(
          ext_modules = cythonize("fib.pyx", **ext_options)
      )
      

      ext_options 包含在此处以生成带有注释的 html 文件。要运行此文件,您必须转到 Tools --> Run setup.py Task。然后输入build_ext 作为任务名称,并在提示输入命令行 时输入--inplace。生成文件fib.c、fib.o和可执行文件fib.so。注释文件 fib.html 也被创建。

      现在,以下代码应该可以在任何 python 文件中使用,例如 main.py:

      import fib
      fib.fib(2000)
      
    2. 更简单的方法是使用 pyximport。不需要安装文件。请注意,这只能在 "your module doesn’t require any extra C libraries or a special build setup." 文件 main.py 现在看起来像这样的情况下使用:

      import pyximport; pyximport.install()
      import fib
      fib.fib(2000)
      

      据我了解,即使 fib.c、fib.o 和 fib.so 也会发生相同的代码编译文件不会出现在项目文件夹中。 fib.html 代码也不会生成,但这可以通过在主文件中添加两行来解决。随着新行 main.py 现在是:

      import pyximport; pyximport.install()
      import subprocess
      subprocess.call(["cython", "-a", "fib.pyx"])
      import fib
      fib.fib(2000)
      

    【讨论】:

    • 除了这些说明之外,我们还必须确保 PyCharm 知道包 fodler 包含 Python 模块,否则它将忽略它。见stackoverflow.com/questions/40203488/…
    • 如何添加一个包内的函数?我的意思是我的 main.py 在根目录中,我有一个名为“my_package”的包,那里有“my_py_file.py”,里面有“my_function()”。如果我将“my_py_file.py”重构为“my_py_file.pyx”并使用您的第二种方法,我会在 main.py 中收到错误:import my_package.my_py_file as mpf ModuleNotFoundError: No module named 'my_package.my_py_file'
    • 我有一个关于在 PyCharm stackoverflow.com/q/54014959/2227222 中调试 Cython 代码的问题。你愿意看看,看看你有什么建议吗?
    猜你喜欢
    • 2019-03-22
    • 2021-07-02
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    • 2013-10-04
    • 1970-01-01
    相关资源
    最近更新 更多