2

我有一个test包含敏感代码的小辅助函数。hello.pyx为了屏蔽此代码,我在 package中编写并使用了该函数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.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文件放置在安装目录中。但是,我不确定此选项是否适用于项目中的非 python 文件include_package_data=Falsesetup.py

4

1 回答 1

5

你打算如何分发包?

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

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

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

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

exclude mypackage/*.c

于 2017-08-07T14:36:21.340 回答