【问题标题】:How can I include C sources to be compiled to an executable (not an extension) in a Python package?如何在 Python 包中包含要编译为可执行文件(而不是扩展名)的 C 源代码?
【发布时间】:2015-02-28 04:53:30
【问题描述】:

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

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

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

【问题讨论】:

标签: python setuptools


【解决方案1】:

您几乎回答了自己的问题。是什么阻止了您执行刚才在此处描述的操作,并创建了一个类似于下面的 sn-p 的 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'],
      )

【讨论】:

    猜你喜欢
    • 2013-08-03
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    相关资源
    最近更新 更多