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,发现成功启动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值