利用 django-admin.py 建立一個新專案後,準備要在專案目錄底下用 manage.py 開始做事情時,出現了詭異的錯誤訊息:

$ python manage.py
Traceback (most recent call last):
  File "manage.py", line 8, in <module>
    from django.core.management import execute_from_command_line
ImportError: No module named django.core.management

 

錯誤訊息中的大意是找不到 django.core.management 這個 module,利用下面的指令檢查一下 module source:

$ python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
/usr/lib/python2.7/site-packages

 

看起來很正常,但是我安裝 Django 時是利用 Python 3 的 pip 裝的,這時候就會有問題了!以我目前碰過的系統環境,大部分都會預載 Python 2,而 Python 2 與 Python 3 同時存在時,通常 python 指令都是指到 Python 2。可以輸入 python -V 或是 which python 去確認這件事情:

$ python -V
Python 2.7.14

$ which python
/usr/bin/python

$ ls -l /usr/bin/python
lrwxrwxrwx 1 Calos None 16 Jun 18 00:21 /usr/bin/python -> /usr/bin/python2.7

 

這時候換個方式去使用 manage.py,使用 python3 後就正常:

$ python3 manage.py

Type 'manage.py help <subcommand>' for help on a specific subcommand.

Available subcommands:

[auth]
    changepassword
    createsuperuser

[django]
    check
    compilemessages
    createcachetable
    dbshell
    diffsettings
    dumpdata
    flush
    inspectdb
    loaddata
    makemessages
    makemigrations
    migrate
    runfcgi
    shell
    showmigrations
    sql
    sqlall
    sqlclear
    sqlcustom
    sqldropindexes
    sqlflush
    sqlindexes
    sqlmigrate
    sqlsequencereset
    squashmigrations
    startapp
    startproject
    syncdb
    test
    testserver
    validate

[sessions]
    clearsessions

[staticfiles]
    collectstatic
    findstatic
    runserver

 

這時候我們可以確定是版本造成的問題,那如果想要變更 python 指令使用的版本,只要將現有的 /usr/bin/python 刪掉後,重建連結指到 python3 去即可:

$ rm -f /usr/bin/python
$ ln -s /usr/bin/python3 /usr/bin/python

# 這時候確認版本可以看到 python 指令執行的是 python 3
$ python -V
Python 3.6.4

 


Reference: python – Django – “no module named django.core.management” – Stack Overflow

留言