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脚本中嵌入最后两条指令.
谢谢
首先查看您正在使用的实用程序的文档。如果有复杂的参数,可能有一个配置文件。
这应该整理你的第一个命令:
# 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)
现在您只需键入make或make compile即可获得所需的效果。