如何从bash直接执行python脚本(没有python命令的前缀)?

时间:2011-05-16 22:58:56

标签: bash shell

我刚刚开始使用终端来满足我的编程需求。在很多Django教程中,我看到有人说,例如,我应该在终端输入:

manage.py runserver

然而,当我这样做时,它说:

bash: manage.py: command not found

当我这样做时,我开始工作:python manage.py runserver,但是我想理解为什么这样做而另一种方法没有。我想这些是一些非常基本的东西,但我想我会在这里问。

4 个答案:

答案 0 :(得分:11)

这是因为您的manage.py不是可执行脚本。

首先将此行放在manage.py的顶部(假设您的python位于/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

答案 1 :(得分: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脚本的目录。这可能是一个安全的假设。如果您希望能够从文件系统中的任何位置执行它,则可以通过修改PATH~/.profile或{{1}将目录添加到~/.bash_profile文件。 (如果其中一个已经存在,请选择那个。我似乎记得OS X上有~/.bashrc个问题的其他人发现一个或另一个文件运行良好,而另一个文件从未执行过。)

(在我的情况下,我在PATH中有一堆自编写的实用程序,但您可能在其他位置。根据需要更改路径。)

~/bin/

答案 2 :(得分:0)

manage.py需要可执行。尝试:chmod +x manage.py

答案 3 :(得分: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不这样做吗?我想是的,因为我可以在manage.py文件夹中找到../bin。并在官方文档中说明,他们也这样做。所以我相信;)

另外,您是否通过easy_install获得了Django?我的脚本希望你使用Snow Leopard和系统版本(Python 2.6)。