友情提示:如果你在搭建python3环境的过程中碰到以下问题,换台服务器重新来吧,真的。
1. /usr/local/python3.6.0/bin/python3.6: error while loading shared libraries: libpython3.6m.so.1.0: cannot open shared object file: No such file or directory
解决 echo "/usr/local/python3.6.0/lib/" >> /etc/ld.so.conf && /sbin/ldconfig
2. ModuleNotFoundError: No module named '_sqlite3'
这个搞了大半天没搞出来,比如安装sqlite-devel啊,重新去下载编译sqlite,换系统啊等等,直到后面去修改setup.py才解决这个模块问题
vim /path/to/Python-$version/setup.py
sqlite_incdir = sqlite_libdir = '/usr/local/sqlite/include' //替换None
sqlite_inc_paths = [ '/usr/local/sqlite', //sqlite需要自己下载安装放到/usr/local/下
3. 要命的问题来了。。。
sqlite3.NotSupportedError: URIs not supported
django.db.utils.NotSupportedError: URIs not supported
我能找到解决的资料很少,直接卡在这里了。。。
另外,为了不扰乱原来的环境建议使用虚拟环境,可参考我的博文 python venv模块
开始分享,如何在centos7.3上安装python3.6.4+django2.0
这里以python3.6.4来讲解,其他版本,只要python版本大于2.7,都是一样的
首先安装依赖,没事,到时候缺啥再YUM安装。
yum install sqlite-devel zlib-devel openssl-devel -y
下载Python
wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4rc1.tar.xz
可到 https://www.python.org/ftp/python/ 自己选择python的版本
xz -d Python-3.6.4rc1.tar.xz && tar xvf Python-3.6.4rc1.tar && cd Python-3.6.4rc1/
./configure && make && make install
检验python3是否安装正确
python3 -V
安装django
pip3 install django //PS:可以指定版本 pip3 install django==2.0
了解一下django和python的版本对应表
Django version | Python versions |
1.8 | 2.7, 3.2 (until the end of 2016), 3.3, 3.4, 3.5 |
1.9, 1.10 | 2.7, 3.4, 3.5 |
1.11 | 2.7, 3.4, 3.5, 3.6 |
2.0 | 3.4, 3.5, 3.6 |
2.1 | 3.5, 3.6, 3.7 |
你就知道你应该安装什么版本的django了吧。。
安装完django,我们来创建一个项目
django-admin startproject mysite
项目结构
mysite
├── db.sqlite3
├── manage.py
└── mysite
├── __init__.py
├── __pycache__
│ ├── __init__.cpython-36.pyc
│ ├── settings.cpython-36.pyc
│ ├── urls.cpython-36.pyc
│ └── wsgi.cpython-36.pyc
├── settings.py
├── urls.py
└── wsgi.py
manage.py ----- Django项目里面的工具,通过它可以调用django shell和数据库等。
settings.py ----- 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量,这里的设置会作用于整个项目。
urls.py ----- 负责根据用户输入的URL路径去映射到项目中对应的应用程序。 其实在实际生产中,一般项目中的每个应用
也都会建立一个 urls.py 文件;项目的 urls.py 文件中一般定义 一个url 地址会 匹配到某个应用的urls.py,
每个应用中的 urls.py 文件内,定义具体自己应用下的地址和 views 中函数的映射关系
终于到了最后一步了,启动!
先允许所有主机能访问
vim /opt/mysite/mysite/settings.py
ALLOWED_HOSTS = ['*']
再启动的时候开放所有地址
python3 manage.py runserver 0:8000
访问http://ip:8000 看见一个小火箭(2.0版本的),你就成功搭建了python3+django了。
如果你还不能访问,无非就是防火墙问题了,那没关系,我也不推荐你这样做!!
首先呢,我们还是允许所有访问ALLOWED_HOSTS = ['*'] //也可限制
但是启动的时候 python3 manage.py runserver 我们只监听本地!//建议监听本地及内网
netstat -ntlup|grep 8000
tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN 3929/python3
OK,我们使用NGINX来做反向代理,直接用域名来访问django项目
nginx安装就不贴了,咱贴个配置。
upstream dj.1.com
{
server 127.0.0.1:8000;
}
server
{
listen 80;
server_name dj.1.com;
location / {
proxy_pass http://dj.1.com;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_log /data/wwwlogs/dj.1.com.proxy.err;
access_log /data/wwwlogs/dj.1.com.proxy.log access;
}
解析。。访问http://dj.1.com 欧了~
可python3 manage.py runserver 老放着在前台也不好,何况要是程序异常退出了咋办。
幸好有supervisor进程管理工具,刚好是python写,咱直接安装。。
easy_install supervisor
生成配置文件
echo_supervisord_conf > /etc/supervisord.conf
tail -5 /etc/supervisord.conf
[include]
files = /etc/supervisord.d/*.ini
mkdir -p /etc/supervisord.d
写一个配置文件
vim /etc/supervisord.d/py3_mysite.ini
[program:py3_mysite]
directory = /opt/mysite ; 程序的启动目录
command = /usr/local/python3.6/bin/python3 manage.py runserver
autostart = true ; 在 supervisord 启动的时候也自动启动
autorestart = true ; 程序异常退出后自动重启
redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
process_name = %(program_name)s
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数
stdout_logfile = /tmp/out-%(program_name)s.log
启动supervisord
/usr/bin/supervisord -c /etc/supervisord.conf
查看status
supervisorctl status
乖乖的跑着呢。最后放开机启动就行了。