2014-09-26 42 views
0

我想從終端運行python文件,而不必使用命令$ python。但我仍然想保持使用'$ python進入python解釋器的能力。例如,如果我有一個名爲'foo.py'的文件,我可以使用$ foo.py而不是$ python foo.py來運行該文件。如何避免在終端中運行python文件時需要命令'python'?

我該怎麼做?我需要更改bash文件或路徑嗎?是否有可能有兩個命令可用,所以我可以使用$ foo.py$ python foo.py

我使用的是Ubuntu 14.04 LTS,我的終端/ shell使用'.bashrc'文件。我在我的電腦上安裝了多個python版本,但是在運行python文件時,我希望默認版本是2.7.x的最新版本。如果我所問的是不可能的或者不推薦的,我想至少將命令$ python縮短爲。

非常感謝您的幫助!

回答

2

是的你可以做到這一點。

1)確保你的文件的第一行是這樣的:

#!/usr/bin/env python 

2)確保您的文件已執行權限位設置,像這樣:

$ chmod +x foo.py 

3)現在,假設您的$PATH環境變量設置正確*,您可以運行foo.py任一方式:

$ foo.py 
$ python foo.py 

*所謂 「正確」,我的意思是, 「包括的目錄你的Python文件的生活。」在你描述的用例中,這可能意味着「包含當前目錄」。要做到這一點,請編輯.bashrc。一個可能的線放在.bashrc是:PATH="$PATH":.

+0

所以我需要在所有的python文件的頂部添加'#!/ usr/bin/env python'?有沒有辦法解決這個問題呢? – DavidC 2014-09-26 17:39:15

+0

你只需要將它包含在你想要直接執行的那個上。例如,您不需要將其包含在「輸入」文件中。而「解決方法」就是說'python foo.py'。 – 2014-09-26 17:41:38

+0

好吧,這是有道理的。我很抱歉,因爲我在定製我的外殼方面做了很多工作。從'$ echo $ PATH'得到的輸出是'/ usr/local/sbin:/ usr/local/bin:/ usr/sbin:/ usr/bin:/ sbin:/ bin:/ usr/games:/ USR /本地/ games'。你知道這條路是否設置正確? – DavidC 2014-09-26 17:44:25

0

sharkbyte,

容易在你所有的Python文件的頂部插入 '#在/ usr /斌/包膜蟒蛇!'。只需在您的Python文件所在的目錄運行此sed命令:

sed -i '1 i\#! /usr/bin/env python\n' *.py

-i選項告訴sed做文件的就地編輯時,1意味着只有1號線運行,和i\是插入命令。我在插入文本的末尾添加了一個\n以使修改後的文件看起來更好。 :)

如果你是妄想嘔吐,首先複製一些文件到一個空目錄&做一個測試運行。

此外,你可以告訴sed來使每個原始文件的備份,例如:

sed -i.bak '1 i\#! /usr/bin/env python\n' *.py

對MS的風格,或

sed -i~ '1 i\#! /usr/bin/env python\n' *.py

爲通常的Linux風格。