【问题标题】:Cythonize but not compile .pyx files using setup.pyCythonize 但不使用 setup.py 编译 .pyx 文件
【发布时间】:2016-04-07 23:51:42
【问题描述】:

我有一个包含多个 .pyx 文件的 Cython 项目。为了分发我的项目,我想按照推荐的 in the Cython documentation 提供我生成的 .c 文件,以尽量减少不同 Cython 版本的问题。

我目前的工作流程是使用以下方法构建项目:

me@machine$ python setup.py build_ext --inplace

这 cythonizes(即使用 Cython 将 .pyx 文件转换为 .c / .cpp 文件)所有 .pyx 文件,然后编译它们。 对于一个版本,我不需要编译的 (.so) 文件,所以我基本上忽略它们。问题是,我在无用的编译上浪费了很多时间。

有没有办法使用setup.py 对文件夹中的所有 .pyx 文件进行 cythonize 处理,而无需编译它们?

编辑:为什么不直接使用$ cython my_file.pyx

我有大约 20 个具有不同 compiler directives.pyx 文件。在命令行上为每个文件调用 cython 比等待它编译要慢。

另一方面,创建一个 shell 脚本来对它们进行 cythonize 会给我留下第二个需要保持最新的编译器指令列表。我宁愿不这样做,以尽量减少可能的故障点。

【问题讨论】:

  • cython your_file.pyx 不正是因为这个原因吗!?
  • 是的,我可以编写一个 shell 脚本来将它应用到我所有的 .pyx 文件中。但这会给我的项目添加另一个文件,我必须保持最新,尤其是关于 Cython 参数。鉴于 setuptools 每次构建项目时都会执行此任务,我希望有一种方法可以使用它。也许我只是错过了正确的命令。

标签: python cython setuptools setup.py software-distribution


【解决方案1】:

创建 C 文件而不编译它们的一种方法是首先在 setup.py 中删除“setup(...)”行并仅将其替换为“cythonize("*.pyx")”部分。然后运行:

me@machine$ python setup.py

【讨论】:

  • 谢谢,这正是我想要的。为了更好地将它与我现有的设置文件集成,我可以检查像 --cythonize-only 这样的参数,它只会调用 cythonize 部分并运行整个设置部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-04
  • 1970-01-01
  • 2014-03-16
相关资源
最近更新 更多