分类 Python 下的文章

基于Python在Win环境下总是出现各类问题,想着采用新的WSL环境来部署运行Python项目。

一、安装WSL系统,参考微软官方教程

wsl --install

安装完成后即可等待重启,然后运行Unbutu,首次会提示初始化,并设置用户名和密码,之后可在计算机里看到Linux目录。

二、安装pip等工具

Unbutu系统自带了python3,但是发现无pip命令,执行安装(sudo apt install python3-pip)时报错,报错如下

Package python3-pip is not available but is referred to by another package.
This may mean that the package is missing, has been obsoleted, oris only available from another source
E: Package 'python3-pip' has no installation candidate

执行以下命令后,即可

sudo apt-get update
sudo apt-get upgrade  #Optional
sudo apt install python3-pip

三、后续安装virtualenv时会提示警告,导致无法使用该命令

WARNING: The script virtualenv is installed in '/home/desk/.local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.

解决方案如下:

echo 'export PATH=$PATH:$HOME/.local/bin' >>~/.bashrc
source ~/.bashrc


注意点:

1、需要保证两边环境一致,仅以Win为例进行了测试,按理应该一样。

2、安装完毕后没有虚拟环境,可先将全局包进行安装。

3、虚拟环境和系统正式环境操作一致,区别仅在于是否激活虚拟环境,即当前pip是针对的什么环境,可通过pip list进行查看

一、具体步骤

1. 生成安装包列表文件

    # 安装包列表保存到文件requirements.txt中,文件名是自己定义,
    # 如果文件已经存在会被覆盖更新,不存在会自动创建
    # 虚拟环境目录下执行这个命令,则打包的虚拟环境的内容
    # 否则生成的文件内容是系统python版本使用的安装包列表
    pip freeze > requirements.txt

2. 将包列表文件中的所有包下载到文件夹下

    # [.\packages]为保存安装包的路径,不存在会被创建
    # [requirements.txt]为前一步生成的包列表文件
    pip download -d  .\packages  -r requirements.txt

3. 将①和②中生成的包列表文件和安装包文件夹复制到另一台上

4. 依据包列表文件以及安装包文件夹来安装包


1、首先确保已正确安装nginx,supervisor,并正常启用nginx和supervisor

yum install nginx supervisor
systemctl start nginx
systemctl enable nginx
systemctl start supervisor
systemctl enable supervisor

2、新建Flask项目和相关虚拟环境包等

virtualenv venv #新建虚拟环境
. venv/bin/activate
pip install gunicorn

3、修改app.py文件

import os
from flask import Flask, request, jsonify

app = Flask(__name__)

# gitEE中webhooks的secret
gitee_secret = 'XXXX'

@app.route('/hooks', methods=['POST'])
def post_data():
    # 认证签名是否有效
    signature = request.headers.get('X-Gitee-Token', '')
    print("获取到访问token:%s", signature)

    if signature != gitee_secret:
        return "token认证无效", 401
    # 运行shell脚本,更新代码
    os.system('sh deploy.sh')
    return jsonify({"status": 200})

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

4、新建deploy.sh文件

echo '========Start DEPLY========'
echo '--------enter Dir ------------'
cd /home/opc/XXXX
echo '--------start git pull------------'
git pull
echo '--------init requirements------------'
. venv/bin/activate
pip install -r requirements.txt
deactivate
echo '-----ex root-----'
sudo -i
echo '-----restart supervision-----'
supervisorctl restart XXXX
echo '----- reload nginx-----'
nginx -s reload
echo '========END DEPLY========'

5、新建supervisor.ini文件(也可省略,手工启动即可)

;[include]
;files = relative/directory/*.ini
[program:XXXX]directory=/home/opc/XXXX
command=/home/opc/XXXX/venv/bin/python3 /home/opc/XXXX/venv/bin/gunicorn -b 127.0.0.1:1111 app:app
startsecs=0
stopwaitsecs=0
autostart=true
autorestart=true

6、将supervisor.ini文件拷贝到/etc/supervisor.d/目录下,并重启supervisord