记录下过程
安装Python3.6
正常情况下,Python3.6是自带的
$ sudo apt-get install python3.6
创建Python3虚拟环境
ubuntu自带Python2和Python3,默认情况下Python2的优先级高
需要虚拟一个Python3的环境
# 安装virtualenv
$ sudo apt-get install virtualenv
# 创建python3.6虚拟环境 -p指定python3.6解释器路径
$ virtualenv -p /usr/bin/python3.6 envPython3.6
# 激活Python3.6环境
$ cd envPython3.6
$ source bin/activate
#查看当前版本
$ python -V
注:
如果不使用虚拟环境,也可提升Python3.6的优先级
如果有多个Python3.x,调整Python3的优先级,使得3.6优先级较高
$ sudo update-alternatives –install /usr/bin/python3 python3 /usr/bin/python3.5 1
$ sudo update-alternatives –install /usr/bin/python3 python3 /usr/bin/python3.6 2更改默认值,python默认为Python2,现在修改为Python3
$ sudo update-alternatives –install /usr/bin/python python /usr/bin/python2 100
$ sudo update-alternatives –install /usr/bin/python python /usr/bin/python3 150查看当前版本
$ python -V
sudo apt-get install libapache2-mod-wsgi-py3
创建一个Django应用
安装Django
# 在激活的Python3.6虚拟环境中
$ pip install Django
创建一个项目
$ django-admin startproject DjangoProj
DjangoProj为项目名,项目名需要为合法的 Python 包名,如不能为 1a 或 a-b等。
创建成功后,会有一个DjangoProj文件夹,里面包含manage.py
文件
创建一个应用
# 在激活的Python3.6虚拟环境中
$ cd DjangoProj
$ python manage.py startapp firstApp
安装Apache2 和 mod_wsgi
$ sudo apt-get install apache2
$ sudo apt-get install libapache2-mod-wsgi-py3
配置文件
在/etc/apahce2/sites-available
文件夹下创建配置文件,如firstApp.conf
# firstApp.conf
<VirtualHost *:80>
#如果有域名,可以配置域名;没有域名,可以配置ip地址
ServerName hello.com
ServerAlias abcName
#管理员联系方式
ServerAdmin helloAdmin@hello.com
#指定项目路径
WSGIDaemonProcess abcName python-home=/home/ubuntu/envPython3.6/
WSGIProcessGroup abcName
# 配置wsgi.py脚本路径 在使用Django创建的项目目录下面
WSGIScriptAlias /firstApp /home/ubuntu/envPython3.6/DjangoProj/DjangoProj/wsgi.py
<Directory /home/ubuntu/envPython3.6/DjangoProj/>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
使用VS Code Remote SSH打开文件时,可能会遇到权限问题,可以用如下命令修改相应文件夹的权限
变更所有者
$ sudo chown -R 当前用户名 /etc/apache2/sites-available/
修改wsgi.py
添加如下代码
import sys
PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0,PROJECT_DIR)
完整代码
import os
import sys
PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0,PROJECT_DIR)
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'DjangoProj.settings')
application = get_wsgi_application()
激活配置文件
$ sudo a2ensite firstApp.conf
$ sudo systemctl reload apache2