Cython:控制 cythonize 停止将编译后的 .c 文件从 .pyx 文件放置在安装目录中

Cython: control cythonize to stop placing compiled `.c` file from `.pyx` file in install directory

我有一个包含敏感代码的小辅助函数 test。为了屏蔽这段代码,我在 hello.pyx 中编写了函数并在我的包 mypackage 中使用它。

我可以通过将包的 setup.py 修改为如下内容来构建和使用它:

import os                                                                                                                                             
from setuptools import setup, find_packages                                                                                                           
from Cython.Build import cythonize                                                                                                                    
os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir)))                                                                        

setup(                                                                                                                                                
    name='mypackage',                                                                                                                                  
    ext_modules = cythonize('mypackage/hello.pyx'),                                                                                             
    packages=find_packages(),                                                                                                                         
    include_package_data=True,                                                                                                                        
    )

然而,当我通过 python setup.pypip install build/install 时,生成的 cython hello.c 以及 hello.so 被放置在安装中目录(在我的例子中 ~/.local/python2.7/site-packages/mypackage/

我可以从安装目录中手动删除 hello.c(只留下 hello.so 文件)并且程序包运行良好。

有什么方法可以使这个过程自动化,这样我就不需要手动删除已编译的 c 文件了吗?

我看了这个。但是,当我尝试使用 pip wheel . 构建轮子时,在 cythonize 操作期间出现错误。另外,就我而言,只要安装的代码不包含 hello.c

的纯文本文件,我就可以使用 tar.gz 安装

[编辑]

我可以通过在 setup.py 中使用 include_package_data=False 来停止在安装目录中放置 .c 文件。但是,我不确定这个选项是否意味着非python 个项目中的文件

您打算如何分发包裹?

如果源可分发文件中没有 .c 文件,Cython 将成为您项目的依赖项。由于 Cython 是静态代码生成器,因此在生成 .c 个文件后 不需要

通过将它们包含在您的源代码分发中,可以通过在 .c 文件上使用标准安装工具扩展而不是在 .pyx 文件上使用 cythonize 来安装软件包而无需 Cython。

这也是 Cython documentation 中的建议,展示了如何在开发和分发的两者之间切换。

如果你真的想排除它们并使 Cython 成为依赖项,请将以下内容添加到 MANIFEST.in

exclude mypackage/*.c