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

goo*_*ofd 2 python cython python-2.7 cythonize

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

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

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,                                                                                                                        
    )
Run Code Online (Sandbox Code Playgroud)

但是,当我通过python setup.pyor构建/安装它时pip install,生成的 cythonhello.c以及hello.so被放置在安装目录中(在我的情况下~/.local/python2.7/site-packages/mypackage/

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

有没有办法可以自动化这个过程,这样我就不需要手动删除编译的c文件?

我看着这个stackoverflow 问题。但是,当我尝试使用pip wheel .. 另外,就我而言,只要安装的代码不包含纯文本文件,我就可以使用 tar.gz 进行安装hello.c

[编辑]

我能够.c通过include_package_data=False在我的setup.py.. 中使用来停止将文件放入安装目录

dan*_*nny 6

你打算如何分发包?

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

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

这也是Cython 文档中的建议,它展示了如何在两者之间切换以进行开发和分发。

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

exclude mypackage/*.c