Cython - 在setup.py中的标志

Gue*_*iky 7 python cython python-3.5

我开始用Cython编译我的Python 3项目,我想知道是否可以将我当前的编译时工作流减少到单个指令.

这是我现在的setup.py:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize

extensions = [
    Extension("v", ["version.py"]),
    Extension("*", ["lib/*.py"])
]

setup(
    name = "MyFirst App",
    ext_modules = cythonize(extensions),
)
Run Code Online (Sandbox Code Playgroud)

这是我从shell运行以获取我的可执行文件:

python3 setup.py build_ext --inplace
cython3 --embed -o main.c main.py
gcc -Os -I /usr/include/python3.5m -o main main.c -lpython3.5m -lpthread -lm -lutil -ldl
Run Code Online (Sandbox Code Playgroud)

整个过程运行得很好,我想知道是否有办法在setup.py脚本中嵌入最后两条指令.

谢谢

tre*_*son 1

首先查看您正在使用的实用程序的文档。如果有复杂的参数,可能有一个配置文件。

这应该整理你的第一个命令:

# setup.cfg
[build_ext]
inplace=1
Run Code Online (Sandbox Code Playgroud)

我在文档中没有看到任何有关构建后步骤的内容,而且我真的不希望此过程随后执行 shell 命令。build_ext用于构建 python。make对于构建 C 二进制文件来说非常可用且常用。

添加Makefile到您的项目。如果您已经gcc安装,那么您可能已经make

# Makefile (lines need to start with tab)

compile:
    python3 setup.py build_ext --inplace
    cython3 --embed -o main.c main.py
    gcc -Os -I /usr/include/python3.5m -o main main.c -lpython3.5m -lpthread -lm -lutil -ldl

Run Code Online (Sandbox Code Playgroud)

现在您只需键入makemake compile即可获得所需的效果。