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.py
或 pip 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
我有一个包含敏感代码的小辅助函数 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
build/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_package_data=False
来停止在安装目录中放置 .c
文件。但是,我不确定这个选项是否意味着非python 个项目中的文件
您打算如何分发包裹?
如果源可分发文件中没有 .c
文件,Cython 将成为您项目的依赖项。由于 Cython 是静态代码生成器,因此在生成 .c
个文件后 不需要 。
通过将它们包含在您的源代码分发中,可以通过在 .c
文件上使用标准安装工具扩展而不是在 .pyx
文件上使用 cythonize 来安装软件包而无需 Cython。
这也是 Cython documentation 中的建议,展示了如何在开发和分发的两者之间切换。
如果你真的想排除它们并使 Cython 成为依赖项,请将以下内容添加到 MANIFEST.in
exclude mypackage/*.c