Command-Line

Unix環境下開發python API的基本步驟

  • November 1, 2014

我正在為虛擬機開發 Unix 環境中的 API。大多數模組都是用python開發的。我對此有幾個問題。

我的文件副檔名為abc.py. 我想把它作為一個命令。例如,virtman dominfo [vmid]應該是命令語法。現在我必須付出./virtman.py dominfo [vmid]才能實現這一目標。我#!/usr/bin/python在 python 文件中有第一行。那麼如何將其作為命令呢?

我的 echo $PATH 看起來像 ‘/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin0’

我閱讀了很多文章,但沒有得到清晰的圖片,因此任何提示/建議都會有所幫助。

您似乎弄錯了,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.

¹刪除命令名稱中的mv點是必要的,但不是真正必要的,./abc.py如果您不重命名它,您可以呼叫它。

引用自:https://unix.stackexchange.com/questions/165378