Python 在共享多平台POSIX环境中使用C

Python 在共享多平台POSIX环境中使用C,python,c,cross-platform,posix,scripting,Python,C,Cross Platform,Posix,Scripting,我编写在共享工作区中使用的工具。因为有多个操作系统在这个领域工作,所以我们通常使用Python并标准化跨机器安装的版本。但是,如果我想用C编写一些东西,我想知道是否可以将应用程序包装在Python脚本中,该脚本可以检测操作系统并启动正确版本的C应用程序。每个平台都有可用的GCC,并使用相同的shell 一个想法是将C编译到用户local~/bin,并与C代码进行时间戳比较,这样就不会在每次运行时编译它,而只在代码更新时编译它。另一种方法是为每个平台编译它,并让包装器脚本选择适当的可执行文件 是否

我编写在共享工作区中使用的工具。因为有多个操作系统在这个领域工作,所以我们通常使用Python并标准化跨机器安装的版本。但是,如果我想用C编写一些东西,我想知道是否可以将应用程序包装在Python脚本中,该脚本可以检测操作系统并启动正确版本的C应用程序。每个平台都有可用的GCC,并使用相同的shell

一个想法是将C编译到用户local~/bin,并与C代码进行时间戳比较,这样就不会在每次运行时编译它,而只在代码更新时编译它。另一种方法是为每个平台编译它,并让包装器脚本选择适当的可执行文件

是否有可接受/稳定的流程?有捕获物吗?是否有替代方案(假设绝对需要使用本机C代码)


澄清:涉及多个不共享ABI的操作系统。例如OS X、各种Linux、BSD等。我需要能够在共享文件夹中就地更新代码,并使新代码或多或少能够即时工作。分发二进制或源代码包并不理想。

你知道,你应该看看静态链接

现在,我们都有巨大的硬盘,而额外的几兆字节(用于携带libc之类的东西)真的没什么大不了的了


您还可以尝试在chroot()监狱中运行应用程序并分发这些应用程序。

根据您的混合操作系统,您最好为每类系统创建软件包


或者,如果它们都共享相同的ABI和硬件体系结构,您也可以编译静态二进制文件。

此外,您可以使用autoconf并仅以源代码形式分发应用程序。:)

仅仅为了选择要运行的正确二进制文件而启动Python解释器实例将比您需要的工作量大得多。我将分发一个shell.rc文件,该文件提供别名

在/shared/bin中,您放入各种二进制文件:/shared/bin/toolname-mac、/shared/bin/toolname-debian-x86、/shared/bin/toolname-netbsd-dreamcast等。然后,在common shared shell.rc文件中,您放入根据平台设置别名的逻辑,以便在OSX上获得别名toolname=/shared/bin/toolname-mac,依此类推

如果您一直在添加新工具,这将不起作用,因为用户需要重新加载别名


不过,我不建议以这种方式分发工具。测试和鉴定工具的新构建应该占用足够的时间和精力,因此将工具分发给用户所需的额外时间微不足道。您似乎正在优化以缩短分发时间。如果在编写和构建工具时出现任何错误,那么更换在实时环境中快速运行的工具很可能会导致漫长而混乱的停机时间,特别是当微妙的跨平台问题悄然出现时。

python解释器并不沉重,至少在已经广泛使用它的*nix环境中是如此。启动时间可以忽略不计,可能为50毫秒。