Python django manage.py如何将项目包放在sys.path上
我阅读了django和一些SO帖子,了解manage.py和django-admin.py之间的区别 他们都说: manage.py在每个Django项目中自动创建。manage.py 是一个围绕django-admin.py的薄包装器,负责两件事 在授权给django-admin.py之前,为您准备:Python django manage.py如何将项目包放在sys.path上,python,django,Python,Django,我阅读了django和一些SO帖子,了解manage.py和django-admin.py之间的区别 他们都说: manage.py在每个Django项目中自动创建。manage.py 是一个围绕django-admin.py的薄包装器,负责两件事 在授权给django-admin.py之前,为您准备: 它将项目的包放在sys.path上 它设置DJANGO_SETTINGS_MODULE环境变量,使其指向 项目的settings.py文件 所以我检查了这两个文件的scource代码(最新版本,
manage.py
做第二件事:设置DJANGO\u SETTINGS\u MODULE环境变量。除此之外,我真的找不到这两个脚本之间的任何差异
[django admin.py]
#!/usr/bin/env python
from django.core import management
if __name__ == "__main__":
management.execute_from_command_line()
[manage.py]
#!/usr/bin/env python
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
为什么??django文档是否过期?还是我错过了什么?将项目包放在sys.path上的代码在哪里?使用
handle\u default\u options(options)
语句更新sys.path
。执行路径如下所示:
从命令行(argv)执行(您的
)manage.py
utility.execute()
handle\u default\u选项(选项)
同样的方法被用作管理命令基类的
Command
类使用。从我所看到的,不是/manage.py
将项目的包放在sys.path上
说:
sys.path从以下位置初始化:
- 包含输入脚本的目录(或未指定文件时的当前目录)
- PYTHONPATH(目录名列表,语法与shell变量PATH相同)
- 与安装相关的默认设置
-S
开关禁用它。现在,当我运行这个脚本(1.py
)时:
我得到:
$ python -S ../1.py # to show that it's not current directory that is added
['/path/to/the/script/directory', '/usr/lib/python35.zip', '/usr/lib/python3.5/', \
'/usr/lib/python3.5/plat-linux', '/usr/lib/python3.5/lib-dynload']
因此,当您运行django admin
时,/path/to/env/bin/django admin
将是sys.path
上的第一个。当/manage.py
时,/path/to/project
因此,有人可能会说,
/manage.py
“将项目的包放在sys.path上”,但间接地说,是因为它是项目的根目录。我知道这是一篇非常古老的文章,我们现在在Django 1.10上,但是基于上面的代码,只有当用户给出--pythonpath
选项时,才会设置Python路径。因此,在没有给出选项的情况下,必须设置Python路径,这就是问题所要问的情况。顺便说一句,在Django 1.10中也是如此。这是正确的答案。因为,如果您放置导入pdb;pdb.set_trace()
紧跟在之后,如果在manage.py
中的
中的的并选中sys.path
,您会看到路径已经设置到包含manage.py
的目录,即输入脚本。
$ python -S ../1.py # to show that it's not current directory that is added
['/path/to/the/script/directory', '/usr/lib/python35.zip', '/usr/lib/python3.5/', \
'/usr/lib/python3.5/plat-linux', '/usr/lib/python3.5/lib-dynload']