以python自定义模块的方式共享API(数据,短信通知、邮件通知,代理等)
文章目录
- 自定义模块的好处
- 哪些函数需要放到自定义模块当中
- 生成自定模块
- 通过ansible,将模块发布到云服务器上
经常写脚本的同学应该会经常碰到一些函数得反复的重写,比如日志,告警等。我在云上写了不少机器人脚本,每个都会涉及到一些公共的操作,比如,连接数据库(mysql,elasticsearch),寻找动态代理,发送短信,邮件通知等;要在这些脚本之间共享这些操作,需要将这些公共函数放到一个模块当中,并且发布到本地的python仓库当中。
这篇文章,简要记录一下生成自己模块的方式,同时也给大家一些tips,通过共享哪些函数可以减少我们的重复开发工作。
自定义模块的好处
- 首先,模块化开发最大的好处自然是减少重复的代码,一块代码,可以在不同的项目中复用
- 其次,通过模块的发布,可以快速将bug修复,新功能的添加等同步到各个项目当中
- 最后,模块可以“屏蔽”细节,不让函数细节,变量,环境参数等直接暴露在代码当中
哪些函数需要放到自定义模块当中
那作为一个python玩家,一般我们需要将哪些函数放到自定义模块里面呢?自然是我们常用的一些工具类函数(不以做项目为前提,只是玩),比如:
- 发送短信和邮件通知 (每当机器人运行某个任务失败时(比如薅羊毛失败),需要及时通知)
- 获取动态代理资源
- 可以翻墙的requests (已经使用了代理)
- 获取cookie (当机器人需要访问需要登陆的资源时,可以直接使用cookie,具体查看文章用chrome插件实现cookie同步)
- 生成数字签名 (使用nodejs/python实现bitmex API的签名signature)
- 获取shodan上的可以用资源
还有其他的,比如生成时间窗口,获取交易所实例等,就不一一列举
生成自定模块
当你整理完自己的需求之后,就生成自定模块了。步骤很简单:
- 创建一个目录,比如: common_util
- 加入你的模块文件,比如
common_util.py
- 在目录下创建一个
setup.py
文件,包含类似内容: (注意如果你的模块引用了其他模块,需要添加requires
参数。tips: 使用pycharm编辑,可以自动为你添加)
from distutils.core import setupsetup(name='common_util',version='1.0',author='lex',url='https://lex-lee.blog.csdn.net/',author_email='103192647@qq.com',py_modules=['common_util'],requires=['requests', 'pymysql', 'boto3'])
目前,你的目录结构为:
MacBook-Pro:common_util lex$ tree
.
├── common_util.py
└── setup.py
- 然后执行
python3 setup.py build
,会多出一个build
目录
├── build
│ └── lib
│ └── common_util.py
- 再执行
python setup.py sdist
,会多出一个dist
目录和MANIFEST文件,dist
目录下的.gz
文件是我们可以用于发布包
├── MANIFEST
├── dist
│ └── common_util-1.0.tar.gz
解压后,其目录结构为:
├── dist
│ ├── common_util-1.0
│ │ ├── PKG-INFO
│ │ ├── build
│ │ │ └── lib
│ │ │ └── common_util.py
│ │ ├── common_util.py
│ │ └── setup.py
- 进入该目录,执行
python3 setup.py install
即可安装到本地的python库当中
安装完成后,进入python,检查是否包已经可用
这里一个小tips:自己写的函数也会忘的,建议大家把注释写好
通过ansible,将模块发布到云服务器上
既然都已经写了公共模块了,自然是因为这个公共模块常常要用,自然也会有需要需要发布到不同的机器上。但因为自己封装的函数总会涉及到一些access key, password等,自然不能发布到PyPI上,所以,需要借助ansible往自己的云资源上发布。
我们可以写一个自动化的脚本,调用ansible进行发布:
#!/usr/bin/env bash_*_ coding: utf-8 _*_@Time : 2019/6/25 9:42 AM@Author : lij021@File : build_install_deploy.shecho "开始 build ---------------------------"
python3 setup.py buildecho "开始 sdist ---------------------------"
python setup.py sdistecho "开始 install 到云 ---------------------------"cp ./dist/* ./roles/deploy/files/
ansible-playbook -i hosts deploy.ymlecho "开始 install 到本地 ---------------------------"
cd dist
tar -zxvf common_util-1.0.tar.gz
cd common_util-1.0
python3 setup.py install
因此,整个项目的目录结构如下:
.
├── MANIFEST
├── __pycache__
│ └── common_util.cpython-36.pyc
├── build
│ └── lib
│ └── common_util.py
├── build_install_deploy.sh
├── common_util.py
├── deploy.yml
├── dist
│ ├── common_util-1.0
│ │ ├── PKG-INFO
│ │ ├── build
│ │ │ └── lib
│ │ │ └── common_util.py
│ │ ├── common_util.py
│ │ └── setup.py
│ └── common_util-1.0.tar.gz
├── hosts
├── roles
│ └── deploy
│ ├── files
│ │ └── common_util-1.0.tar.gz
│ └── tasks
│ └── main.yml
└── setup.py
ansible的脚本也很简单:
---
- name: upload filecopy: src={{package_file}}.tar.gz dest=~ force=yes mode=0644- name: install packagebecome: yesshell: tar -zxvf {{package_file}}.tar.gz; cd {{package_file}}; python3 setup.py install;
至此,你每有一个版本更新,运行一下build_install_deploy.sh
即可发布到所有的环境,?
以python自定义模块的方式共享API(数据,短信通知、邮件通知,代理等)相关推荐
- python模块导入教学_【python基础课|今日教学内容:Python导入模块的方式,学python的必备技能】- 环球网校...
[摘要]在这个科学技术高速发展的时代,越来越多的人都开始选择学习编程软件,那么首先被大家选择的编程软件就是python,也用在各行各业之中,并被大家所熟知,所以也有越来越多的python学习者关注py ...
- python 抓取解析接口数据_[干货]用python抓取摩拜单车API数据并做可视化分析(源码)...
原标题:[干货]用python抓取摩拜单车API数据并做可视化分析(源码) 在APP中能看到很多单车,但走到那里的时候,才发现车并不在那里.有些车不知道藏到了哪里:有些车或许是在高楼的后面,由于有GP ...
- python 自定义模块加密_Python开发【第一篇】Python基础之自定义模块和内置模块...
为什么要有模块,将代码归类.模块,用一砣代码实现了某个功能的代码集合. Python中叫模块,其他语言叫类库. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代 ...
- python 自定义模块的发布和安装
[学习笔记] 自定义模块 使用的是pycharm 说白了就是.py文件都可以作为模块导入,像定义一个文件 名字为Mycode __all__ = ["add","sub ...
- python自定义模块和三方模块_python基础知识8——模块1——自定义模块和第三方开源模块...
模块的认识 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需 ...
- python 自定义模块_Python 自定义模块路径
问题: 假设我们自己写了一个名为 log_config.py 的日志记录程序模块.此模块会被其他程序所引用,如下例子. import log_config logger = log_config.lo ...
- python自定义包_详解python自定义模块、包
1.保存一个hello.py文件在F:/data/python目录下hello.py >>> def hello(x): print x 目录 导入 >>> imp ...
- python 自定义模块怎么用_python自定义模块使用说明
保存一个hello.py文件在F:/data/python目录下hello.py >>> def hello(x): print x 目录 导入 >>> impor ...
- python自定义模块的使用_python自定义模块使用说明
保存一个hello.py文件在F:/data/python目录下hello.py >>> def hello(x): print x 目录 导入 >>> impor ...
最新文章
- DeepMind的AI能指导人类的直觉吗?
- 【ZK-curator使用异常】KeeperErrorCode = Unimplemented for /***
- 多线程方式实现Socket通信
- nginx+fastcgi+c/c++搭建高性能Web框架
- CNCF 官方大使张磊:Kubernetes 是一个“数据库”吗?
- arm--ldm、stm指令解析
- 前言 第一章 为什么要培养好习惯
- 建模的计算机基础理论,数学建模基础理论
- 【DataBase Notation(1/3)】Notation_Chen, Crow‘s Foot and UML
- 服务器有什么类型?应用功能是什么
- 背单词App开发日记4
- RS笔记:传统推荐模型之FFM (引入特征域的概念) [2015 Criteo]
- 在windows XP运行CISCO7200路由器仿真器
- Python在线办公系统毕业设计源码071116
- DSS 代码分析【服务器架构】
- catia制作物料明细,如何在CATIA中生成产品物料清单 划重点了
- 深度清理C盘空间,让你的C盘多出20G
- 手把手教你使用 Java 在线生成 pdf 文档
- 海航集团怎么样温暖世界的呢?
- 2022年全球及中国天然橡胶产业供需趋势及行业期货市场走势:预计供需双增长,价格上行[图]