为 *nix 创建 Python 可执行文件 [重复]

Posted

技术标签:

【中文标题】为 *nix 创建 Python 可执行文件 [重复]【英文标题】:Creating Python Executables for *nix [duplicate] 【发布时间】:2016-01-13 07:06:04 【问题描述】:

我用 python 编写了一个库,有点像脚本语言,我想把这个库变成一个终端可执行文件,可以这样调用:

myprogram /path/to/file

就像 python 运行 .py 一样,这将使用我的库中定义的函数运行文件。这有可能吗?

【问题讨论】:

#!/usr/bin/python 作为第一行。那么chmod +x myprogram.py 这绝不会回答问题。我如何制作一个程序来运行具有定义功能的 .whatever 文件。类似于库,但来自命令行。 啊哈!对不起,误解了这个问题。所以你需要一个调度员。你可以像我说的那样创建executable.py,然后以libfun1lbfun2、...的形式链接到executable.py,你检查什么是zeroeth sys.argv,并基于sys.argv[0] 你调度到特定的功能 所以基本上是一个读取文件的命令行应用程序,并且对于文件中的每个匹配函数,运行该特定函数? @tristan 不,据我了解,他想要busybox 之类的东西 【参考方案1】:

假设你这样写函数

#!/usr/bin/python

import sys

if (sys.argv[0] == "./funA.py"):
    print("Calling A")
    # ...
    sys.exit(0)

if (sys.argv[0] == "./funB.py"):
    print("Calling B")
    # ...
    sys.exit(0)

print(sys.argv[0])

你称它为main.py。然后你做这样的链接

$ `ln main.py funA.py`
$ `ln main.py funB.py`

实际上只有一个代码,三个名称,链接数等于 3。 但是如果你运行它

./funA.py

它将被发送到您代码中的funA 块。 但是如果你运行它

./funB.py

它将被发送到您代码中的funB 块。 等等等等

这是你要找的吗?

【讨论】:

是的,这太完美了!!谢谢! 很高兴听到。这就是小型系统的busybox 的工作原理。都是像lnlscat 等所有小的unix 函数工具。一个可执行文件静态链接,但随后从它设置了大量链接,看起来像lnlscat。几乎相同的调度程序逻辑是选择在里面运行什么函数

以上是关于为 *nix 创建 Python 可执行文件 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中找到底层文件类型?

python 将Nix的配置文件bash脚本转换为Fish的Python脚本

从 python 代码为 Windows 创建独立的可执行文件

python 通过 subprocess 执行命令,重定向实时输出

o和a是啥意思啊?

Python/SciPy - 创建可执行文件