gpt4 book ai didi

python - 我在做 cythonization 吗?

转载 作者:行者123 更新时间:2023-12-05 05:32:42 27 4
gpt4 key购买 nike

我正在尝试让 cython 参与一个项目。

我的做法是:

  1. 创建一个名为 make_cython.py 的文件

    import distutils.core
    import Cython.Build
    distutils.core.setup(ext_modules = Cython.Build.cythonize("main.py"))
    distutils.core.setup(ext_modules = Cython.Build.cythonize("helper.py"))
  2. 运行 python3 make_cython.py build_ext --inplace

  3. 对两个 cythnoized 文件运行

    gcc -shared -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing       -Ipython/anaconda3/include/python3.9 -o main2.so main.c
    gcc -shared -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing -Ipython/anaconda3/include/python3.9 -o helper2.so helper.c
  4. 将我的脚本中调用 main.pyhelper.py 的所有导入调用更改为 import main2导入 helper2

现在,我有两个问题:

  1. 如果 helper.pymain.py 本身有其他 .py 文件的导入,我是否需要对它们进行 cythonize也是,然后更改导入,然后对新文件进行 cythonize 处理,还是全部递归完成?

  2. 尝试运行使用 main2.so (import main2) 和 helper2.so ( import helper2):

    ImportError: helper2.so: undefined symbol: Py_EnterRecursiveCall

我在编译中遗漏了什么?

最佳答案

没有。

几个简单的要点:

if helper.py and main.py themselves have import for other .py files, do I need to cythonize them too, and then change the imports, and then cythonize the new file, or is it all done recursively?

它不是递归完成的。 Cython 可以愉快地导入 .py 文件,因此您不需要全部用 Cython 化。

I get the error when trying to run files [...]

如果您只使用 setup.py 生成的文件,您可能会发现它消失了。但那是因为你没有链接 libpython。

关于python - 我在做 cythonization 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74019240/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com