如何在Python包中包含要编译为可执行文件(而不是扩展)的C源代码



我有一个用于科学工作的Python包,作为其中的一部分,它运行一个可执行文件(通过子进程),该可执行文件是从单个C源文件编译的,在其他方面与Python无关(即,它不是扩展)。

我们希望在包中包含C源代码,这样setup.py(我们使用的是setuptools)将对其进行编译,并且包可以通过pkg_resources或将其与console_scripts生成的脚本一起安装在用户路径中来访问可执行文件。

我们有办法做到这一点吗?出于可维护性的原因,我们不希望将可执行文件转换为C扩展,并且无论如何,使用该命令对我们的用户都有一定的帮助。

您基本上回答了自己的问题。是什么阻止了你做你刚才描述的事情,并创建了一个看起来像下面片段的setup.py文件。

import subprocess
from distutils.core import setup
code = """
#include <stdio.h>
int main(int argc, char *argv[]){printf("%s\n", "Hello world.");}
"""
# Write code to file 
f = open("main.c", 'w')
f.write(code)
f.close()
# Compile c code
p = subprocess.Popen(["cc", "-O2", "main.c", "-o", "main.out"]).wait()
subprocess.call(["./main.out"])
setup(name='foobar',
      version='1.0',
      packages=['foobar', 'foobar.subfoo'],
      )

最新更新