我有一个非常简单的Python问题,使用Django的例子。运行Python脚本时,是否始终必须在脚本文件名前加上 python 命令?
在我关注的Django教程中,一些命令如下:
django-admin.py startproject mysite
然而,其他是这样的:
python manage.py runserver
为什么顶级的人不需要 python 命令?
或者,如果我的系统知道我的python解释器要执行所有Python脚本,那么为什么底层需要 python 命令?
答案 0 :(得分:3)
答案在于两件事的结合:
考虑django-manage.py
的第一行。在我的系统上,它位于/usr/local/bin/django-admin.py
,第一行是:
#!/usr/bin/python2.7
文件的权限:
-rwxr-xr-x 1 root root 127 Jan 9 13:38 /usr/local/bin/django-admin.py
shebang告诉我的操作系统我想用/usr/bin/python2.7
的解释器执行该文件。权限中的x
个字符表示它是可执行文件。我不需要事先指定python
,因为操作系统可以从上面的信息中自动找出这些内容。
现在,对于我通过运行manage.py
制作的新创建的django-admin.py startproject mysite
,它看起来像这样:
#!/usr/bin/env python
和权限:
-rw-r--r-- 1 wim wim 249 Feb 17 17:33 manage.py
shebang表示要使用env
指向的任何python解释器,因此该部分已经到位。但是该文件缺少可执行权限,因此仅运行./manage.py
将无法正常工作。
通过使用django-manage.py
显式设置可执行标志,我可以使其与chmod +x manage.py
的行为相同。之后,当您在目录中执行x
时,您应该看到设置了ls -l
标志,并且您应该能够在不事先指定python
的情况下运行该文件。
注意: 仍然必须使用./manage.py
,而不仅仅是manage.py
,这种差异是因为django-admin.py
生活在{ {1}}包含PATH
,而/usr/local/bin/
文件可能不包含{1}}。所以我们在shell中明确指定路径,其中manage.py
指的是当前目录。
答案 1 :(得分:1)
您可以使用chmod +x script.py
使脚本可执行,但您需要shebang行,通常是#!/usr/bin/python
如果你在基于unix的机器(mac,linux)上大量使用脚本,那么使用别名会很有用:
alias command="python path/to/script.py"