2011-05-16 137 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)。