2012-05-05 63 views
4

我一直在尋找答案的網站,現在相當長的一段時間,但這是給我真的頭疼:執行Python程序

我使用Ubuntu 12.04和我要執行從終端Python腳本,而不使用完整路徑。 所以我加的/ home/kyril /蟒蛇/腳本/到PATH變量通過把以下內容./bashrc:

kyrilpathvariable="/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/kyril/Python/scripts/:/home/kyril/Bash/scripts" 

if [ "$kyrilpathvariable" = "$PATH" ]; then 
    echo PATH already exported 

else 

PATH=$PATH:/home/kyril/Python/scripts/ 
PATH=$PATH:/home/kyril/Bash/scripts/ 
export PATH 

fi 

(我知道,如果條款是沒有必要的,但我不喜歡什麼都有)

現在的問題是:這完全適用於我的Bash腳本,所以通過chmod使它們可執行後,我可以只鍵入$ script.sh並執行它。但是,如果我鍵入$ python3 script.py引發以下錯誤:python3: can't open file 'script.py': [Errno 2] No such file or directory

,如果我在的完整路徑,它的工作原理腳本類型。任何人有一個想法,我在做什麼錯了?我必須將目錄添加到PYTHONPATH嗎? (據我所知,這隻有幫助導入模塊)。

謝謝你們!

+1

爲什麼你要script.py的''運行python3 script.py'代替'? – robert

回答

5

當直接調用python3時,python會運行您告訴它的腳本文件,而不使用$PATH來查找它。 PYTHONPATH是無關緊要的 - 用於搜索Python模塊。

我猜你在遇到自行運行script.py時調用了錯誤解釋器的問題。我不知道你的腳本的第一行是什麼,但它應該是這樣的:

#!/usr/bin/env python3 

或者,如果你需要更精細的控制:

#!/usr/bin/env python3.2 

而對於Python的2個腳本:

#!/usr/bin/env python2 

或者:

#!/usr/bin/env python2.7 

在嘗試使用它們之前,應該檢查系統上是否存在這些可執行文件。

+0

謝謝!我有#!/ usr/bin/python3,所以這解決了我的問題! – YumTum

0

我猜想當python搜索輸入文件時會忽略路徑變量。 Python開始在當前目錄中搜索'script.py',但不知道爲該文件聲明瞭一個路徑變量,因此找不到它。

不幸的是我不確定如何解決它,但也許有人更有經驗的變量可以啓發我們?

0
python3 $(type -P script.py) 

告訴Bash在PATH查找可執行文件,並提供其位置和名稱。

例如:

$ type -P script.py 
/usr/local/bin/script.py 
0

爲了避免道路重複條目,你可以這樣做:

for dir in Python Bash; do 
    dir_to_add="$HOME/$dir/scripts" 
    case ":$PATH:" in 
    *:"$dir_to_add":*) ;; # path already contains dir, do nothing 
    *) PATH+=":$dir_to_add" ;; 
    esac 
done 
+0

謝謝!這比我做的更優雅一點:) – YumTum