利用 django-admin.py
建立一個新專案後,準備要在專案目錄底下用 manage.py
開始做事情時,出現了詭異的錯誤訊息:
1
2
3
4
5
|
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:
1
2
|
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
去確認這件事情:
1
2
3
4
5
6
7
8
|
$ 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
後就正常:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
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
去即可:
1
2
|
rm -f /usr/bin/python
ln -s /usr/bin/python3 /usr/bin/python
|
這時候確認版本可以看到 python 指令執行的是 python 3
1
2
|
python -V
Python 3.6.4
|
Reference: python - Django - no module named django.core.management - Stack Overflow