文章目录

  • 自定义模块的好处
  • 哪些函数需要放到自定义模块当中
  • 生成自定模块
  • 通过ansible,将模块发布到云服务器上

经常写脚本的同学应该会经常碰到一些函数得反复的重写,比如日志,告警等。我在云上写了不少机器人脚本,每个都会涉及到一些公共的操作,比如,连接数据库(mysql,elasticsearch),寻找动态代理,发送短信,邮件通知等;要在这些脚本之间共享这些操作,需要将这些公共函数放到一个模块当中,并且发布到本地的python仓库当中。

这篇文章,简要记录一下生成自己模块的方式,同时也给大家一些tips,通过共享哪些函数可以减少我们的重复开发工作。

自定义模块的好处

  • 首先,模块化开发最大的好处自然是减少重复的代码,一块代码,可以在不同的项目中复用
  • 其次,通过模块的发布,可以快速将bug修复,新功能的添加等同步到各个项目当中
  • 最后,模块可以“屏蔽”细节,不让函数细节,变量,环境参数等直接暴露在代码当中

哪些函数需要放到自定义模块当中

那作为一个python玩家,一般我们需要将哪些函数放到自定义模块里面呢?自然是我们常用的一些工具类函数(不以做项目为前提,只是玩),比如:

  • 发送短信和邮件通知 (每当机器人运行某个任务失败时(比如薅羊毛失败),需要及时通知)
  • 获取动态代理资源
  • 可以翻墙的requests (已经使用了代理)
  • 获取cookie (当机器人需要访问需要登陆的资源时,可以直接使用cookie,具体查看文章用chrome插件实现cookie同步)
  • 生成数字签名 (使用nodejs/python实现bitmex API的签名signature)
  • 获取shodan上的可以用资源

还有其他的,比如生成时间窗口,获取交易所实例等,就不一一列举

生成自定模块

当你整理完自己的需求之后,就生成自定模块了。步骤很简单:

  1. 创建一个目录,比如: common_util
  2. 加入你的模块文件,比如common_util.py
  3. 在目录下创建一个 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
  1. 然后执行python3 setup.py build,会多出一个build目录
├── build
│   └── lib
│       └── common_util.py
  1. 再执行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
  1. 进入该目录,执行 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(数据,短信通知、邮件通知,代理等)相关推荐

  1. python模块导入教学_【python基础课|今日教学内容:Python导入模块的方式,学python的必备技能】- 环球网校...

    [摘要]在这个科学技术高速发展的时代,越来越多的人都开始选择学习编程软件,那么首先被大家选择的编程软件就是python,也用在各行各业之中,并被大家所熟知,所以也有越来越多的python学习者关注py ...

  2. python 抓取解析接口数据_[干货]用python抓取摩拜单车API数据并做可视化分析(源码)...

    原标题:[干货]用python抓取摩拜单车API数据并做可视化分析(源码) 在APP中能看到很多单车,但走到那里的时候,才发现车并不在那里.有些车不知道藏到了哪里:有些车或许是在高楼的后面,由于有GP ...

  3. python 自定义模块加密_Python开发【第一篇】Python基础之自定义模块和内置模块...

    为什么要有模块,将代码归类.模块,用一砣代码实现了某个功能的代码集合. Python中叫模块,其他语言叫类库. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代 ...

  4. python 自定义模块的发布和安装

    [学习笔记] 自定义模块  使用的是pycharm 说白了就是.py文件都可以作为模块导入,像定义一个文件 名字为Mycode __all__ = ["add","sub ...

  5. python自定义模块和三方模块_python基础知识8——模块1——自定义模块和第三方开源模块...

    模块的认识 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需 ...

  6. python 自定义模块_Python 自定义模块路径

    问题: 假设我们自己写了一个名为 log_config.py 的日志记录程序模块.此模块会被其他程序所引用,如下例子. import log_config logger = log_config.lo ...

  7. python自定义包_详解python自定义模块、包

    1.保存一个hello.py文件在F:/data/python目录下hello.py >>> def hello(x): print x 目录 导入 >>> imp ...

  8. python 自定义模块怎么用_python自定义模块使用说明

    保存一个hello.py文件在F:/data/python目录下hello.py >>> def hello(x): print x 目录 导入 >>> impor ...

  9. python自定义模块的使用_python自定义模块使用说明

    保存一个hello.py文件在F:/data/python目录下hello.py >>> def hello(x): print x 目录 导入 >>> impor ...

最新文章

  1. DeepMind的AI能指导人类的直觉吗?
  2. 【ZK-curator使用异常】KeeperErrorCode = Unimplemented for /***
  3. 多线程方式实现Socket通信
  4. nginx+fastcgi+c/c++搭建高性能Web框架
  5. CNCF 官方大使张磊:Kubernetes 是一个“数据库”吗?
  6. arm--ldm、stm指令解析
  7. 前言 第一章 为什么要培养好习惯
  8. 建模的计算机基础理论,数学建模基础理论
  9. 【DataBase Notation(1/3)】Notation_Chen, Crow‘s Foot and UML
  10. 服务器有什么类型?应用功能是什么
  11. 背单词App开发日记4
  12. RS笔记:传统推荐模型之FFM (引入特征域的概念) [2015 Criteo]
  13. 在windows XP运行CISCO7200路由器仿真器
  14. Python在线办公系统毕业设计源码071116
  15. DSS 代码分析【服务器架构】
  16. catia制作物料明细,如何在CATIA中生成产品物料清单 划重点了
  17. 深度清理C盘空间,让你的C盘多出20G
  18. 手把手教你使用 Java 在线生成 pdf 文档
  19. 海航集团怎么样温暖世界的呢?
  20. 2022年全球及中国天然橡胶产业供需趋势及行业期货市场走势:预计供需双增长,价格上行[图]

热门文章

  1. 司铭宇讲师:销售技巧培训之销售沟通说服力
  2. 自从干了IT,我犯过的这些错可以绕地球一圈…
  3. 变量的基本使用Day2
  4. 关于torch.load的一点小tip
  5. [JS JQUERY] 60个JSP免豆资料(教程+源码)下载地址汇总
  6. 机器学习各研究领域综述汇总!
  7. ***测试第一弹:信息刺探
  8. 中小学教师MOOC课程资源媒体技术要求
  9. pycharm连接mysql5.7
  10. dx12 龙书第二十一章学习笔记 -- 环境光遮蔽