当前位置: 首页 > news >正文

python conda实践 sanic框架gitee webhook实践

import subprocess
import hmac
import hashlib
import base64
from sanic.response import text
from sanic import Blueprint
from git import Repo# 路由蓝图
hook_blue = Blueprint('hook_blue')@hook_blue.route('/hook/kaifa', methods=["POST"])
async def kaifa(request):timestamp = request.headers.get('X-Gitee-Timestamp')# 秘钥secret = '**********'secret_enc = bytes(secret.encode('utf-8'))# 把 timestamp+"\n"+密钥 当做签名字符串 string_to_signstring_to_sign = '{}\n{}'.format(timestamp, secret)string_to_sign_enc = bytes(string_to_sign.encode('utf-8'))# 使用HmacSHA256算法计算签名,得到 hmac_codehmac_code = hmac.new(secret_enc, string_to_sign_enc,digestmod=hashlib.sha256).digest()# 将hmac_code进行Base64 encodemy_sign = base64.b64encode(hmac_code).decode('utf-8')gitee_sign = request.json.get('sign')if my_sign == gitee_sign:gitrepo = Repo("/www/wwwroot/********/")remote = gitrepo.remote()info = remote.pull()return text(str(info))else:return text('签名错误')@hook_blue.route('/hook/ceshi', methods=["POST"])
async def ceshi(request):timestamp = request.headers.get('X-Gitee-Timestamp')# 秘钥secret = '*******'secret_enc = bytes(secret.encode('utf-8'))# 把 timestamp+"\n"+密钥 当做签名字符串 string_to_signstring_to_sign = '{}\n{}'.format(timestamp, secret)string_to_sign_enc = bytes(string_to_sign.encode('utf-8'))# 使用HmacSHA256算法计算签名,得到 hmac_codehmac_code = hmac.new(secret_enc, string_to_sign_enc,digestmod=hashlib.sha256).digest()# 将hmac_code进行Base64 encodemy_sign = base64.b64encode(hmac_code).decode('utf-8')gitee_sign = request.json.get('sign')if my_sign == gitee_sign:# 执行的命令cmd = r'git pull'# cwd指的是某个进程运行时所在的目录;cwd是“current working directory”的缩写cwd_path = r'/www/wwwroot/********/'process = subprocess.Popen(cmd, shell=True, cwd=cwd_path, stderr=subprocess.PIPE, stdin=subprocess.PIPE,stdout=subprocess.PIPE)process.wait()result = process.returncodeif result == 0:return text("git 的拉取:成功")else:return text("git 的拉取:失败")else:return text('签名错误')

/******************************************************************/

conda后台运行python脚本shell脚本run.sh:

想以www用户运行脚本,记的切换到www用户,再启动脚本,

./run.sh start

#!/bin/bash

#应用入口文件
APP_NAME=/www/wwwroot/python-webhook/main.py
#进程关键字
PROCESS_KEYWORD=python-webhook

#使用说明,用来提示输入参数
usage(){
    echo "Usage: sh run.sh [start|stop|restart|status]"
}

#检查程序是否在运行
is_exist(){
    pid=`ps -ef|grep $PROCESS_KEYWORD|grep -v grep|awk '{print $2}'`
    if [ -z "${pid}" ];then
        return 1
    else
        return 0
    fi
}

#启动方法
start(){
    is_exist
    if [ $? -eq 0 ];then
        echo "${APP_NAME} is already running. pid=${pid}"
    else
        conda run --name python-webhook nohup python ${APP_NAME} >nohup.out 2>&1 &
    fi    
}

#停止方法
stop(){
  is_exist
  if [ $? -eq "0" ]; then
    ps -ef|grep $PROCESS_KEYWORD|grep -v grep|awk '{print $2}'|xargs kill -9
  else
    echo "${APP_NAME} is not running"
  fi  
}

#输出运行状态
status(){
  is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is running. Pid is ${pid}"
  else
    echo "${APP_NAME} is NOT running."
  fi
}

#重启方法
restart(){
  stop
  sleep 5
  start
}
 
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  *)
    usage
    ;;
esac

/*****************************************************************/

需要以哪个用户来运行python代码,就切换到哪个用户下进行安装:

1. 使用grep www /etc/passwd查看用户权限
$ grep www /etc/passwd
www:x:1001:1001::/home/www:/sbin/nologin
可以看出,www是/sbin/nologin禁止登录的。只要修改这个模式就可以了

2. 修改模式
$ usermod -s /bin/bash www
3. 再次查看状态
$ grep www /etc/passwd
www:x:997:995:www user:/var/cache/www:/bin/bash
4. 然后就可以用su - www切换了
$ su - www
1
5. 恢复的话改为/sbin/nologin即可
$ usermod -s /sbin/nologin www

开始安装:

miniconda和anaconda下载地址

https://docs.conda.io/en/latest/miniconda.html

Free Download | Anaconda

Centos7.9安装miniconda
Miniconda是一个 免费的 轻量级的 conda安装程序
conda是一个开源的包、环境管理器,能在同一个机器上安装不同Python版本的软件包及其依赖,以及在不同Python环境之间切换
Miniconda只包含conda、Python、pip、zlib等基础的文件和依赖包
Anaconda不仅包含conda、Python等基础文件,还包含很多装好的包,如:numpy、pandas
使用conda install命令可从Anaconda存储库中安装额外的conda包
下载Miniconda3-latest-Linux-x86_64.sh

wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
运行.sh

sudo sh Miniconda3-latest-Linux-x86_64.sh
输入安装的路径,如/usr/anconda3

添加/usr/anconda3到系统环境变量文件/etc/profile文件

sudo vi  /etc/profile
添加

export PATH=/usr/anconda3/bin:$PATH
激活生效,或重启

source /etc/profile
检测安装是否成功

conda -V
2、配置conda镜像源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/

# optional
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/

conda config --set show_channel_urls yes

/****************************************/

要卸载 Miniconda,请按照以下步骤进行操作:

打开终端或命令提示符窗口,确保以管理员权限运行。

根据你的操作系统,执行以下命令卸载 Miniconda:

在 Windows 上:

conda install anaconda-clean
anaconda-clean --yes

在 macOS 或 Linux 上:

conda install anaconda-clean
anaconda-clean --yes
在某些 Linux 发行版中,可能需要在命令前加上 sudo。

确认卸载操作。执行上述命令后,你将被要求确认卸载。请仔细阅读提示信息,然后输入 y 或 yes 确认卸载。

删除 Miniconda 安装目录:在终端中执行以下命令,将 <miniconda_install_dir> 替换为你的 Miniconda 安装目录:

rm -rf <miniconda_install_dir>
注意:请谨慎执行此命令,确保你删除的是正确的安装目录。

检查环境变量:卸载 Miniconda 后,你可能还需要手动删除与 Miniconda 相关的环境变量。在 Windows 上,可以通过 “控制面板” -> “系统和安全” -> “系统” -> “高级系统设置” -> “环境变量” 打开环境变量设置界面,然后检查并删除相关的环境变量。在 macOS 或 Linux 上,可以编辑 ~/.bashrc 或 ~/.bash_profile 文件,并删除相关的路径配置。

完成上述步骤后,你的系统应该已成功卸载 Miniconda。请确保在卸载之前备份你的数据,以防万一。

/**************************************************/

创建虚拟环境:

conda create -n python-webhook python=3.11

后台运行python脚本:

conda run --name python311-venv nohup python main.py >nohup.out 2>&1 &

/*************************************************************/

conda可以配合其他python包管理工具一起使用,比如pipenv或者poetry,

conda安装好某个python版本的虚拟环境后,就在这个虚拟环境运行其他包管理工具即可,

比如poetry包管理的项目,虚拟环境安装好poetry工具后,运行poetry install即可安装好项目需要的依赖包,然后启动项目即可

相关文章:

python conda实践 sanic框架gitee webhook实践

import subprocess import hmac import hashlib import base64 from sanic.response import text from sanic import Blueprint from git import Repo# 路由蓝图 hook_blue Blueprint(hook_blue)hook_blue.route(/hook/kaifa, methods["POST"]) async def kaifa(req…...

LeetCode——无重复的最长子串(中等)

题目 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。示例 2: 输入: s "bbbbb" 输出: 1 解释: 因为…...

【SQL】关系模型与查询和更新数据

一、关系模型 1.1 主键 主键是关系表中记录的唯一标识。主键的选取非常重要&#xff1a;主键不要带有业务含义&#xff0c;而应该使用BIGINT自增或者GUID类型。主键也不应该允许NULL。 可以使用多个列作为联合主键&#xff0c;但联合主键并不常用。 1.2 外键 FOREIGN KEY …...

【Centos8_配置单节点伪分布式Spark环境】

安装centos8 jdk部署伪分布式spark环境 安装Centos8 环境下的JDK 下载jdk linux版本 下载链接&#xff1a; jdk-8u381-linux-x64.tar.gz 将该文件上传到Centos8 主机 部署配置jdk&#xff08;java8&#xff09; # 解压到指定路径 [lhangtigerkeen Downloads]$ sudo tar …...

【软考】系统集成项目管理工程师(三)信息系统集成专业技术知识①【16分】

一、系统集成的特点 官方解释&#xff1a; 1、信息系统建设的内容主要包括设备采购、系统集成、软件开发和运维服务等&#xff1b; 2、信息系统集成是指将计算机软件、硬件、网络通信、信息安全等技术和产品集成为能够满足用户特定需求的信息系统&#xff1b;显著特点如下&am…...

揭秘特权账号潜在风险,你中招了吗?

什么是特权账号&#xff1f; 特权账号指在企业运营过程中&#xff0c;为相关业务运营、系统管理、系统运维等人员赋予的系统维护、权限增加、数据修改删除、导出等高级权限的系统账号。这些账号多数连接企业核心资源&#xff0c;保障企业内部各项业务正常运作。然而&#xff0…...

线性代数的学习和整理13: 定义域,值域,到达域 和单射,满射,双射,反函数,逆矩阵

目录 1 函数与 向量/矩阵 2 初等数学的函数 2.1 函数 2.2 函数的定义&#xff1a;定义域 →映射→ 值域 3 高等数学里的函数&#xff1a;定义域和陪域/到达域&#xff08;非值域&#xff09;的映射关系 3.1 函数 3.2 单射&#xff0c;满射&#xff0c;双射等都是针对…...

深入MaxCompute -第十一弹 -QUALIFY

简介&#xff1a; MaxCompute支持QUALIFY语法过滤Window函数的结果&#xff0c;使得查询语句更简洁易理解。Window函数和QUALIFY语法之间的关系可以类比聚合函数GROUP BY语法和HAVING语法。 MaxCompute&#xff08;原ODPS&#xff09;是阿里云自主研发的具有业界领先水平的分…...

Mysql定时备份事件

创建了一个名为backup_database的定时任务&#xff0c;每天自动在当前时间的后一天开始执行。备份数据库的代码使用mysqldump命令将数据库导出为sql文件保存在指定的备份目录中。 需要注意的是&#xff0c;上述代码中的用户名 (username)、密码 (password)、主机名 (hostname) …...

探索ClickHouse——安装和测试

我们在Ubuntu 20 Server版虚拟机上对ClickHouse进行探索。 安装 检测环境 grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"SSE 4.2 supported 可以看到我们的环境支持编译版本的。如果不支持的环境…...

常用的css样式

1&#xff1a;flex布局 .flex-between {display: flex;justify-content: space-between; }.flex-evenly {display: flex;justify-content: space-evenly; }.flex-end {display: flex;justify-content: flex-end; }.flex {display: flex; }.flex-center {display: flex;justify…...

小兔鲜儿 - 微信登录

目录 微信登录​ 登录方式 静态结构​ 获取登录凭证​ 获取手机号码​ 微信登录接口(生产环境) 模拟手机登录(开发环境) 用户信息持久化存储​ 涉及知识点&#xff1a;微信授权登录&#xff0c;文件上传&#xff0c;Store 状态管理等。 微信登录​ 微信小程序的开放…...

C++ Primer阅读笔记--对象移动(右值引用、移动迭代器和引用限定符的使用)

目录 1--右值引用 2--std::move 3--移动构造函数 4--移动赋值运算符 5--移动迭代器 6--引用限定符 1--右值引用 右值引用必须绑定到右值的引用&#xff0c;通过 && 获得右值引用&#xff1b; 右值引用只能绑定到临时对象&#xff08;即将被销毁的对象&#xff09…...

【办公类-16-01-02】2023年度上学期“机动班下午代班的排班表——跳过周三、节日和周末”(python 排班表系列)

背景需求&#xff1a; 2023年第一学期&#xff08;2023年9-2024年1月&#xff09;&#xff0c;我又被安排为“机动班”&#xff0c;根据新学期的校历&#xff0c;手动推算本学期的机动班的带班表 排版原则 1、班级数量&#xff1a;共有6个班级&#xff0c;循环滚动 2、每周次…...

ChatGPT HTML JS Echarts实现热力图展示

热力图是一种常用的数据可视化图表,主要用于展示数据的分布和密度情况。它通过使用不同颜色的热点来表示数据在地理或二维空间上的分布情况,从而直观地显示出数据的密集程度和趋势。 热力图的功能和作用如下: 1. 数据分布展示:热力图可以将大量数据以热点的形式展示在地理…...

JavaScript七小知

文章目录 1. == 和 ===区别2. a++ 和 ++a区别3. 创建js对象的三种方式4. 原型与原型链相关4.1 prototype4.2 __proto__4.3 constructor4.4 原型链5. 定时器的两种设置方式6. 时间相关7. axios与axios拦截器1. == 和 ===区别 ​ == 只是判断值是否一致, ​ === 会判断数据类型和…...

Ubuntu【系统环境下】【编译安装OpenCV】【C++调用系统opencv库】

Ubuntu【系统环境下】【编译安装OpenCV】【C调用系统opencv库】 前言&#xff1a; 本人需要用C写代码&#xff0c;调用OpenCV库&#xff0c;且要求OpenCV版本号大于4.1.0 由于使用的是18.04的版本&#xff0c;所以apt安装OpenCV的版本始终是3.2.0&#xff0c;非常拉胯&#…...

AR界安卓在中国,Rokid引爆空间计算狂潮

击关注 文丨刘雨琦 你可能很难想象&#xff0c;在一个没有显示屏也没有鼠标的空间&#xff0c;仅凭一副AR眼镜和一台口袋主机&#xff0c;就能完成一篇5000字的文章。 没错&#xff0c;8月26日&#xff0c;在2023 Rokid Jungle 新品发布会现场&#xff0c;这样的场景正在真实…...

在 React 中如何使用定时器

在React中使用定时器通常有两种方式&#xff1a;使用setInterval和setTimeout函数。 使用setInterval函数&#xff1a; 首先&#xff0c;在组件中导入useEffect和useState函数&#xff1a; import React, { useEffect, useState } from "react";在组件中声明一个状…...

Unity记录4.6-存储-第四阶段总结

文章首发见博客&#xff1a;https://mwhls.top/4822.html。 无图/格式错误/后续更新请见首发页。 更多更新请到mwhls.top查看 欢迎留言提问或批评建议&#xff0c;私信不回。 汇总&#xff1a;Unity 记录 摘要&#xff1a;存储初步实现的总结 总结-2023/08/19 实现了tile存储&…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...