2011-05-16 133 views
3

我剛開始使用終端來滿足我的編程需求。在很多Django的教程,我看到有人說,例如,我應該在終端輸入:如何從bash直接執行python腳本(不需要python命令的前綴)?

manage.py runserver 

但是當我這樣做,它說:

bash: manage.py: command not found 

我得到它的時候我的工作做:python manage.py runserver,但我想明白爲什麼這個工程,其他方法不。我想這些是一些非常基本的東西,但我想我會在這裏問。

回答

4

bash(1)將搜索您的PATH環境變量以查找要執行的程序。 PATH通常不包含您的「當前工作目錄」(.),因爲打開人多達瑣碎的安全問題:

cd /home/unsavory_character/ 
ls 

如果unsavory_character地方一個可執行的/home/unsavory_character/ls,增加了他或她的ssh(1)關鍵看你~/.ssh/authorized_keys文件,你會感到驚訝 - 他或她可以在沒有密碼的情況下登錄。

因此,這些系統現在不會將當前工作目錄添加到PATH,因爲它太不安全。

解決方法:

./manage.py runserver 

當然,這假定您的當前工​​作目錄是哪個目錄包含了manage.py腳本。這可能是一個安全的假設。如果您希望能夠從文件系統的任何位置執行該文件,您可以通過編輯~/.profile~/.bash_profile~/.bashrc文件將目錄添加到您的PATH。 (如果其中一個已經存在,選擇一個,我似乎回憶其他人在OS X上發現其他問題的其中一個或另一個文件運行良好,另一個從未執行。)

(在我的情況下,我在​​一堆自己編寫的實用程序,但你可能是在其他地方。改變路徑,適當的。)

if [ -d "$HOME/bin" ] ; then 
    PATH="$HOME/bin:$PATH" 
fi 
0

manage.py需要可執行。嘗試:chmod +x manage.py

+0

我已經試過那個,但沒有奏效。儘管感謝您的幫助! – Javaaaa 2011-05-16 23:07:13

10

這是因爲你的manage.py不是可執行腳本。

先放這條線在manage.py頂部(假設您的蟒蛇是/usr/bin/python):

#!/usr/bin/python 

然後使你的腳本執行:

chmod +x manage.py 

然後嘗試執行腳本./manage.py runserver

閱讀此鏈接的詳細信息:http://effbot.org/pyfaq/how-do-i-make-a-python-script-executable-on-unix.htm

+0

謝謝!你能解釋一下(或者連接到某個地方)關於#!/ usr/bin/python的真正含義是什麼,所以我可以很好地理解這一點。我有時會看到Windows教程,他們在Windows設置中的某處更改PATH,我怎麼能在Mac上做這樣的事情? – Javaaaa 2011-05-16 23:13:28

+0

@Javaaaa:'#!'的讀音[shebang](http://en.wikipedia.org/wiki/Shebang_%28Unix%29)。 – Gilles 2011-05-16 23:17:04

+0

'#!/ usr/bin/python'是Mac上python二進制文件的完整路徑。在Unix腳本中,這行代表了將解釋腳本的二進制可執行文件的路徑。還有我的答案中的鏈接,請檢查一下。 – anubhava 2011-05-16 23:18:09

0

我一起煮一個小的「腳本」自動完成:(只複製整個文本,並粘貼活躍終端內部)

tee -a ~/.profile <<EOF 

if [ -d "/Library/Python/2.6/site-packages/django/bin" ] ; then 
    PATH=/Library/Python/2.6/site-packages/django/bin:$PATH 
fi 
EOF 

不是django-admin.py也一樣嗎?我認爲是這樣,因爲我可以在我的../bin文件夾中找到manage.py。並且在官方文件中指出,他們也是這樣做的。所以我相信;)

另外,你有沒有通過easy_install獲得Django?我的腳本期望您使用系統版本的Snow Leopard(Python 2.6)。