Unix环境下开发python API的基本步骤

Unix环境下开发python API的基本步骤

我正在为虚拟机开发 Unix 环境下的 API。大多数模块都是用 python 开发的。我对此有几个问题。

我的文件扩展名为abc.py.我想把它作为一个命令。例如,virtman dominfo [vmid]应该是命令语法。现在我必须付出./virtman.py dominfo [vmid]才能实现这一目标。我有#!/usr/bin/pythonpython 文件中的第一行。那么如何将其作为命令呢?

我的 echo $PATH 看起来像 '/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin0'

我读了很多文章,但没有得到清晰的了解,所以任何提示/建议都会有帮助。

答案1

您似乎误会了,这abc.py不是命令。如果你可以执行它,那么,只是一个名称中带有点的程序。在您可以执行的意义上执行./abc.py,因此必须设置执行位。如果你比你做的事情python abc.py还不是命令。

一般来说,要使普通的 python 文件abc.py可执行,您应该确保第一行显示为:

#!/usr/bin/env python

(这假设你有/usr/bin/env一个程序,并且会找到python命令,该命令可能位于 中/usr/local/bin。它还假设你想要运行默认值python(通常是指向特定 python 版本的链接,如python2.7),你也可以使用python3if这可以作为命令使用)。

之后做

chmod +x abc.py
mv abc.py abc

然后你就可以运行了./abc。如果当前目录在您的路径中,或者如果您移动abc到路径中的目录,您应该能够abc从任何地方执行。

然而,重命名和移动文件也有缺点:

  • 您不能再这样做from abc import SomeClass,因为文件已重命名
  • 如果文件处于修订控制之下,则它可能不再是

因此,我通常做的是创建一个/usr/local/bin/abc如下所示的新文件:

#!/usr/bin/env python

from abc import main
main()

并在底部abc.py

def main():
    doing the real stuff

if __name__ == '__main__':
    main()

的目录abc.py需要在 PATH 中 python 搜索模块,但这样就不必更改,并且可以被任何程序用作导入,并以python abc.py.

1去掉命令名中的点是必要的,但不是真正必要的,如果不重命名也可以调用。mv./abc.py

答案2

Anthon 的答案是正确的,但是对于重要的 Python 项目,您应该看看迪斯图尔斯标准库中的模块。它是设计的以“正确的方式”在系统上部署 python 模块和可执行文件,并且:

  • Python 开发人员熟悉(或者应该)这个模块,因为它位于标准库中,并且大多数知名的 Python 包(Django、NumPy、Celery 等)都在使用它。新人将立即知道如何部署您的项目。

  • 一旦定义了项目中的文件和包,只需运行 python setup.py install即可在系统上部署和更新包。

    不再需要手动更新PATH变量、复制文件/usr/local/bin或将它们设置为可执行文件,这一切都为您处理!

  • 您可以使用pip install -e在开发模式下安装软件包。

  • 它在 Windows 或 OSX 环境中也是可移植的(某种程度上)。

另外,我不能推荐使用参数解析器,例如arg解析如果您正在设计命令行工具就足够了。

相关内容