contos7 配置 python3环境 支持微信公众号开发

前言

刚学python,拿微信公众号开发来练手,微信公众号是要验证token的

在百度云买了个云主机,系统选了contos7 发现默认预装的是python2,但本地开发时候用的windows环境,然后项目的依赖环境是python3,所以要在不影响python2使用的情况下,配置python3。

网上查资料也踩了不少坑,把配置的过程总结一下。

1.安装python3

新机器上来啥都没,只有yum,下载编译依赖包(没错,需要自己编译)

yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make

1).下载python3源码

cd /home/download #这里我找个放文件的目录
wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz #会下载到/home/download里

解压,编译

tar -xvJf  Python-3.7.4.tar.xz
cd Python-3.7.4
./configure prefix=/usr/local/python3
make && make install

装完了,但这时候你执行python -V,还是会提示你在python2下面
这时候需要设置一个软连接来关联python3,这里我们不改动原来的python,新建一个python3命令
至于为啥要这么做,因为contos其他的命令可能是依赖python2的,如果一个个都修改,会比较麻烦,比如yum使用的就是py2

ln -s /usr/local/python3/bin/python3 /usr/bin/python

python3 -V #成功的话,执行这个命令应该能看到python3版本

2).软连接pip3

pip3 -V #试试pip3能用不,一般是不行的,除非你跑到/usr/local/python/bin下去执行

ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 #给pip3增加软连接,方便直接调用

pip3 -V #成功后应该能看到一个版本映射了,以后都能在任意目录下直接用pip3命令了

2.微信公众号token验证

先追求能用即可,安全性,优雅,日志全部暂时不考虑,用flask构建一个微信的api

微信接入逻辑参考: 微信接入指南

# coding=UTF-8
from flask import Flask
from flask import request
import hashlib

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def home():
    return 'hello'

@app.route('/wx', methods=['GET', 'POST'])
def wx():
    if request.method == "GET":
        my_signature = request.args.get('signature')     # 获取携带的signature参数
        my_timestamp = request.args.get('timestamp')     # 获取携带的timestamp参数
        my_nonce = request.args.get('nonce')        # 获取携带的nonce参数
        my_echostr = request.args.get('echostr')         # 获取携带的echostr参数

        token = ''     # 这里放微信拿来的token

        # 进行字典排序
        data = [token,my_timestamp ,my_nonce ]
        data.sort()

        # 拼接成字符串,这里要encode一下,不然会报错
        temp = ''.join(data).encode(encoding='UTF-8',errors='strict')

        # 进行sha1加密
        mysignature = hashlib.sha1(temp).hexdigest()

        # 加密后的字符串可与signature对比,标识该请求来源于微信
        if my_signature == mysignature:
            return my_echostr
        else:
            return 'errToken'

if __name__ == '__main__':
    app.run()

完事了上传到服务器上

3.python项目作为服务启动

1).创建服务

新建一个名为my_web_service.service的文件,并用vim编辑器打开

vim /usr/lib/systemd/system/my_web_service.service

insert键,进入vim的编辑模式

复制以下内容,按shift+insert黏贴后,按esc退出编辑模式,输入:wq 保存并退出


Description=WX Service
After=network.target

[Service]
Type=idle
ExecStart=/usr/local/python3/bin/python3 /your_upload_path/pyfile.py

[Install]
WantedBy=multi-user.target


ExecStart里为服务启动时执行的命令,必须写全路径

/usr/local/python3/bin/python3是我们之前安装的python3

/your_upload_path/pyfile.py 是你要启动的项目

2).启动服务

这里不需要全路径了,直接打服务名字即可(之前创建的服务文件my_web_service)

依次执行以下命令

#启用自定义服务
systemctl enable my_web_service.service

#启动服务
systemctl start my_web_service.service

#查看服务
systemctl status my_web_service.service -l

至此,项目应该已经在服务器上跑起来了

参考资料

部署python项目到linux服务器

python3.7.1 建立 pip3 软连接

发布了35 篇原创文章 · 获赞 9 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_31061615/article/details/100042221