2013-10-20 18 views
1

我閱讀了django doc和一些SO帖子,以瞭解manage.py和django-admin.py之間的區別。django manage.py如何在sys.path中放置一個工程包

他們都說:

manage.py在每個Django項目自動創建。 manage.py 是圍繞django-admin.py薄的包裝,需要照顧的兩件事情 你委託給django-admin.py前:

  1. 它把你的項目的包放在sys.path中。
  2. 它設置DJANGO_SETTINGS_MODULE環境變量,使其指向 您項目的settings.py文件。

所以我檢查了這2個文件的scource代碼(最新版本,因此它的文檔)。

然後我很困惑。 manage.py做了第二件事:設置DJANGO_SETTINGS_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上的代碼?

回答

3

sys.path更新here使用handle_default_options(options)聲明位於here。執行路徑如下:

  • execute_from_command_line(argv)(您的manage.py
  • utility.execute()here
  • handle_default_options(options)here

相同的方法被用於通過用作基類管理命令Command類。

+0

我知道這是一個非常老的帖子,我們現在在Django 1.10中,但是基於上面的代碼,只有當用戶給出'--pythonpath'選項時纔會設置Python路徑。所以當沒有給出選項時,其他的東西必須設置Python路徑,這就是問題所在。 BTW。在Django 1.10中,它仍然是一樣的。 –

1

從我所看到的不是./manage.py誰「把你的項目的包放在sys.path中。」

The doc說:

sys.path中從這些位置初始化:

  • 包含輸入腳本(或沒有指定文件時,當前目錄)的目錄。
  • PYTHONPATH(目錄名稱列表,其語法與shell變量PATH相同)。
  • 安裝相關的默認值。

安裝相關的默認必須是什麼site.py補充道。但是可以使用-S開關禁用它。那麼現在,當我運行此腳本(1.py):

import sys 
print(sys.path) 

我得到:

$ 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中」,但是間接地,通過成爲你項目的根源。

+0

這是正確的答案。因爲,如果你把'import pdb;在'if__name__ =='__main __「:'in'manage.py'後面的pdb.set_trace(),並檢查'sys.path'你會發現路徑已經被設置爲包含'manage.py'的目錄,即輸入腳本。 –

相關問題