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