Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Cython:控制cythonize以停止将`.pyx`文件中编译的`.c`文件放置在安装目录中_Python_Python 2.7_Cython_Cythonize - Fatal编程技术网

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

Python Cython:控制cythonize以停止将`.pyx`文件中编译的`.c`文件放置在安装目录中,python,python-2.7,cython,cythonize,Python,Python 2.7,Cython,Cythonize,我有一个包含敏感代码的小助手函数test。为了屏蔽这段代码,我在hello.pyx中编写了函数,并在我的包mypackage中使用它 我可以通过将包的setup.py修改为以下内容来构建和使用它: import os

我有一个包含敏感代码的小助手函数
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.py
pip install
构建/安装它时,cython生成了
hello.c
以及
hello.so
都被放在了安装目录中(在我的例子中,
~/.local/python2.7/site packages/mypackage/

我可以手动从安装目录中删除
hello.c
(只留下
hello.so
文件),包运行正常

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

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

[编辑]


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

您打算如何分发该包

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

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

这也是一个建议,其中展示了如何在开发和分发这两者之间切换

如果确实要排除它们并使Cython成为依赖项,请将以下内容添加到MANIFEST.in


排除mypackage/*.c

您的项目目录中有
清单吗?如果是,它包含什么?在
中没有
清单。。顺便说一句,我刚刚更新了这个问题,我同意Cython是一个依赖者。谢谢,这很有效