CentOS6.7 安装django3.1.2
将django程序部署到CentOS6.7上,程序内部使用postgre数据库
当前环境
CentOS release 6.7 (Final)
postgresql-9.6
python3.6
Apache/2.2.15
安装第三方包
源码安装
将django、psycopg2、asgiref、pytz、sqlparse、xlrt、xlwt这几个包放入 /3rdtools目录,依次安装,安装命令格式如下
tar -zxvf Django-3.1.2.tar.gz
cd Django-3.1.2
python setup.py install
(在安装psycopg2时,如果报错【错误:#error “Psycopg requires PostgreSQL client library (libpq) >= 9.1”】,则需要将postgre版本升级到9.1以上)
安装psycopg2后import失败
参考链接:https://stackoverflow.com/questions/56978734/psycopg2-importerror-undefined-symbol-pqconninfo
安装psycopg2后发现import psycopg2会报错ImportError: /usr/local/python3.6/lib/python3.6/site-packages/psycopg2-2.8.6-py3.6-linux-x86_64.egg/psycopg2/_psycopg.cpython-37m-x86_64-linux-gnu.so: undefined symbol: PQescapeIdentifier
解决方案有两种:
- 添加到库路径
在/etc/profile末尾添加一行
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/pg96/lib
再执行source /etc/profile
- 改变动态库指向路径
将此包所用到的libpq.so.5指向/usr/local/pg96/lib/libpq.so
mv /usr/lib64/libpq.so.5 /usr/lib64/libpq.so.5.backup20201119
ln -s /usr/local/pg96/lib/libpq.so /usr/lib64/libpq.so.5
安装mod_wsgi
参考https://blog.csdn.net/taiyangdao/article/details/56047246
有三种方法,采取任意一种即可,我采用的是第二种
- 使用pip install mod_wsgi
- 使用python安装源码包mod_wsgi-4.7.1.tar.gz:在解压缩后的目录中执行python setup.py install
- 编译安装源码包mod_wsgi-4.7.1.tar.gz:在解压缩后的目录中依次执行
./configure make make install
(编译安装后,会在/etc/httpd/modules目录下生成mod_wsgi.so文件)
添加mod_wsgi到httpd
(1)如果使用pip安装或者python setup.py install安装
使用mod_wsgi-express module-config命令查看当前wsgi_module位置,显示如下
(pip安装后的显示)
LoadModule wsgi_module "/usr/local/python3.6/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so"
WSGIPythonHome "/usr/local/python3.6"
(源码包安装后的显示)
LoadModule wsgi_module "/usr/local/python3.6/lib/python3.6/site-packages/mod_wsgi-4.7.1-py3.6-linux-x86_64.egg/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so"
WSGIPythonHome "/usr/local/python3.6"
将这显示的这两行添加到httpd的配置文件(/etc/httpd/conf/httpd.conf)的末尾
(2)如果使用编译安装,在配置文件最后一行增加
LoadModule wsgi_module modules/mod_wsgi.so
重启httpd
service httpd restart
httpd启动失败处理
在添加wsgi_module到httpd的配置文件后,发现重启httpd失败,这是由于动态链接库未找到,报错如下
/usr/local/python3.6/lib/python3.6/site-packages/psycopg2-2.8.6-py3.6-linux-x86_64.egg/psycopg2/_psycopg.cpython-36m-x86_64-linux-gnu.so: undefined symbol: PQescapeIdentifier
通过ldd _psycopg.cpython-36m-x86_64-linux-gnu.so显示如下:
[root@localhost httpd]# ldd /usr/local/python3.6/lib/python3.6/site-packages/psycopg2/_psycopg.cpython-36m-x86_64-linux-gnu.so
linux-vdso.so.1 => (0x00007ffd026b5000)
libpq.so.5 => /usr/local/pg96/lib/libpq.so.5 (0x00007fef76dde000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fef76b99000)
libc.so.6 => /lib64/libc.so.6 (0x00007fef76805000)
/lib64/ld-linux-x86-64.so.2 (0x0000003d0a800000)
发现libpq.so.5已经正确指向了(因为之前采用配置LD_LIBRARY_PATH的方法来解决import psycopg2报错),为什么还是报错?怀疑httpd启动的环境变量没有去读取LD_LIBRARY_PATH,而是只读取了系统默认的/usr/lib64,
因此将/usr/local/pg96/lib/libpq.so.5复制到/usr/lib64或将/usr/lib64/libpq.so.5重新指指向/usr/local/pg96/lib/libpq.so.5
重启httpd,发现成功启动
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构