如何从命令行使包可执行?

How to make a package executable from the command line?

我想从命令行创建一个 python 包可执行文件。

我知道您可以执行 chmod +x myfile.py,其中 myfile.py#!/usr/bin/env 开头,使用 ./myfile.py 使单个文件可执行。我也知道您可以 python -m mypackage 到 运行 包含 __main__.py 的包裹。

但是,如果我将 shebang 行添加到包 运行 chmod +x mypackage__main__.py 并尝试 ./mypackage,我会得到错误 -bash: ./mypackage: Is a directory.

是否可以运行这样的包裹?

(明确地说,我 不是 寻找类似 py2exe 的东西来使它成为一个独立的可执行文件。我仍然期待它被解释,我只是想让发布更简单)

简短的回答是

当你创建 chmod +x mypackage 时你什么都不做,因为 mypackage 是一个目录并且目录已经有 execute 标志(否则你将无法列出他们的文件)。如果你输入:ls -l 你会看到。

您可以选择直接 运行 整个软件包而不安装它,这是您已经提到的方式:python -m mypackage,或者制作一个 shell 脚本来为您完成。

我看到你的意图是只执行 ./something 并且你的应用程序开始工作而不在前面指定 python 而且这不是全局安装的。最简单的方法是放置一个 shell 脚本来启动您的包。

这包含您要查找的内容。引导您完成如何设置您的包,以便命令行 application/interface 成为可能。

建议使用 argparse 而不是 sys.argv。 post 的评论也有助于获得更多更新提示。

https://gehrcke.de/2014/02/distributing-a-python-command-line-application/