为 *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
,然后以libfun1
、lbfun2
、...的形式链接到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
的工作原理。都是像ln
、ls
、cat
等所有小的unix 函数工具。一个可执行文件静态链接,但随后从它设置了大量链接,看起来像ln
、ls
、cat
。几乎相同的调度程序逻辑是选择在里面运行什么函数以上是关于为 *nix 创建 Python 可执行文件 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
python 将Nix的配置文件bash脚本转换为Fish的Python脚本
从 python 代码为 Windows 创建独立的可执行文件