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

时间:2015-02-28 04:53:30

标签: python setuptools

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

我们想在包中包含C源代码,这样setup.py(我们使用setuptools)将编译它,包可以通过pkg_resources或者在用户的路径中安装它来访问可执行文件。使用console_scripts生成的脚本。

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

1 个答案:

答案 0 :(得分:0)

你几乎回答了自己的问题。什么阻止你做你刚才描述的事情,并创建一个看起来像下面代码片段的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'],
      )