以脚本形式运行python库
技术背景
当我们尝试运行python的帮助文档时,会看到如下这样的一个说明:
$ python3 -h
usage: python3 [option] ... [-c cmd | -m mod | file | -] [arg] ...
Options and arguments (and corresponding environment variables):
...
-m mod : run library module as a script (terminates option list)
...
这一个条目的意思是,我们可以使用python3 -m这样的指令,在终端的命令行内运行python的一些仓库。比如我们常用的pip,就可以通过python3 -m pip install numpy这样的操作指令来运行。还有一个比较常见的上传python编译安装包到pypi网站上面的工具twine,可以通过python3 -m twine的方法来使用。本文我们主要探讨一下如何在代码中,实现python3 -m 这种命令行运行的模式。
基础功能代码实现
通过python3 -m 这样的方法来运行,本质上只是一个实现方式的改变,而不影响到具体算法的实现,这个形式跟我们直接通过python的API接口去调用是一样的。所以我们需要先按照正常的API接口调用的方法,先把基础代码模块写好。这里我们使用一个开源代码仓库hadder为例,来介绍一下具体的操作方法。我们先看一下Hadder的具体代码架构与相关模块内容:
$ tree hadder/
hadder/
├── examples # 示例
│ ├── case1-complete.pdb
│ ├── case1.pdb
│ ├── case2-complete.pdb
│ ├── case2-complete.png
│ ├── case2.pdb
│ └── case2.png
├── hadder # 根目录
│ ├── constants.py # 存放一些常数
│ ├── __init__.py # 核心算法
│ └── parsers.py # 读取PDB文件
├── LICENSE
├── README.md
├── requirements.txt
└── setup.py
2 directories, 13 files
这里先简单说明一下背景,关于Hadder的具体内容和算法,可以参考这篇博客。Hadder是一个用于给PDB文件补氢原子的小工具,因为在蛋白质折叠的预测过程中,主要以骨架为主,因此氢原子大部分情况下是被忽略的。而在后期建立蛋白质力场的时候,氢原子又是必须使用到的,因此我们可以用hadder这样一个工具来实现补氢的功能。关于hadder我们就不进行更多的介绍了,主要看下其API接口的调用方法:
from hadder import AddHydrogen
AddHydrogen('input.pdb', 'output.pdb')
对外开放的API接口就这么一个,较为简单。接下来我们就可以基于这个功能模块,去创建一个可以通过命令行来运行的方法。
创建__main__.py文件
当我们使用python3 -m模式来运行的时候,python会去自动索引到__main__.py这个文件作为入口文件,因此首先我们在根目录下创建一个__main__.py文件,如下所示:
$ tree hadder/
hadder/
├── examples # 示例
│ ├── case1-complete.pdb
│ ├── case1.pdb
│ ├── case2-complete.pdb
│ ├── case2-complete.png
│ ├── case2.pdb
│ └── case2.png
├── hadder # 根目录
│ ├── constants.py # 存放一些常数
│ ├── __init__.py # 核心算法
│ ├── __main__.py # python -m 模式运行接口文件
│ └── parsers.py # 读取PDB文件
├── LICENSE
├── README.md
├── requirements.txt
└── setup.py
2 directories, 14 files
然后我们就可以在__main__.py文件中结合argparse来使用,实现一个命令行模式运行的功能,如下是__main__.py文件中的代码内容:
# __main__.py
import argparse
from hadder import AddHydrogen
parser = argparse.ArgumentParser()
parser.add_argument("-i", help="Set the input pdb file path.")
parser.add_argument("-o", help="Set the output pdb file path.")
args = parser.parse_args()
pdb_name = args.i
save_pdb_name = args.o
AddHydrogen(pdb_name, save_pdb_name)
我们还是同样的调用AddHydrogen这个API接口,但是由于使用了argparse,使得我们可以在命令行里面输入相关的输入文件路径和输出文件路径。最终运行效果如下:
$ python3 -m hadder -h
usage: __main__.py [-h] [-i I] [-o O]
optional arguments:
-h, --help show this help message and exit
-i I Set the input pdb file path.
-o O Set the output pdb file path.
$ python3 -m hadder -i input.pdb -o ouput.pdb
1 H-Adding task with 3032 atoms complete in 0.116 seconds.
感兴趣的也可以看看使用这个算法加氢前后的构象区别:
补充
一般我们完成了一个算法实现,需要开放给别人使用的时候。以python为例,最方便的做法是将python仓库编译后上传到pypi网站上面,这样大家可以使用pip来进行安装和管理。这里我们补充一个编译上传python仓库的“三步走”方法:
$ python3 setup.py check
$ python3 setup.py sdist bdist_wheel
$ twine upload --repository-url https://upload.pypi.org/legacy/ dist/*
这样一来,我们就可以通过pip来对我们的仓库进行安装和管理,比如可以使用如下的指令安装hadder:
$ python3 -m pip install hadder --upgrade
总结概要
本文主要通过一个实际的案例,介绍了如何可以在命令行中调用和运行我们的python模块。“python -m”这个方案为我们提供了一个新的选项,这个运行方法以“main.py”文件为入口文件运行,结合python中常用的命令行工具argparse,我们就可以很容易的创建一个可以通过命令行运行和获取参数的python模块。并且可以使用twine上传到pypi网站上,用pip进行安装和管理,会更加的便捷。
版权声明
本文首发链接为:https://www.cnblogs.com/dechinphy/p/pym.html
作者ID:DechinPhy
更多原著文章请参考:https://www.cnblogs.com/dechinphy/
打赏专用链接:https://www.cnblogs.com/dechinphy/gallery/image/379634.html
腾讯云专栏同步:https://cloud.tencent.com/developer/column/91958
CSDN同步链接:https://blog.csdn.net/baidu_37157624?spm=1008.2028.3001.5343
51CTO同步链接:https://blog.51cto.com/u_15561675
以脚本形式运行python库的更多相关文章
- shell脚本命令 运行python文件&python命令行运行python代码
单独的python文件运行的时候 报错: 在shell脚本中,运行shell脚本命令:在Python命令行中,运行Python代码.然而,“python hello.py”是一个脚本命令,不是pyth ...
- 三种方法运行python
注:本文基于windows 1.交互式解释器 配置好环境变量后,命令行中打开,输入python即可,Ctrl+Z退出 命令行选项 当从命令行启动Python时,可以给解释器一些选项,如下: -d ...
- 怎样用QtCreator编辑运行python脚本
QtCreator作为一款开发基于qt库的程序.以及开发C语言.c++语言项目都是一个利器,轻便好用.那么作为开发者来说,经常换着使用各种IDE是家常便饭,但是要是这些语言都能够集成到一个工具里岂不是 ...
- 如何在Windows下开发Python:在cmd下运行Python脚本+如何使用Python Shell(command line模式和GUI模式)+如何使用Python IDE
http://www.crifan.com/how_to_do_python_development_under_windows_environment/ 本文目的 希望对于,如何在Windows下, ...
- 如何在命令行里运行python脚本
python是一款应用非常广泛的脚本程序语言,谷歌公司的网页就是用python编写.python在生物信息.统计.网页制作.计算等多个领域都体现出了强大的功能.python和其他脚本语言如java.R ...
- 运行python脚本后台执行
最近搞到了一台服务器,挂一个脚本刷刷河畔在线时间.脚本随便写了两下,能跑到什么时候就随缘了 https://blog.csdn.net/philosophyatmath/article/details ...
- [SublimeText] Sublime Text 2 运行 Python 脚本中文路径解决方法
在 SublimeText 中直接运行 Python 脚本,出现以下报错提示: Running python -u C:\Documents and Settings\Administrator\桌面 ...
- python3:cmd运行python脚本,提示 No module named 'xxx'
问题:cmd窗口运行python脚本,报错 C:\Users\xxx\Documents\GitHub\python3\main>python run_test.pyTraceback (mos ...
- Debian9开机运行Python脚本
吾星喵 关注 2018.04.14 15:30 字数 214 阅读 202评论 0喜欢 1 Debian9开机运行Python脚本 Debian 9.x "stretch" 解决 ...
随机推荐
- 还在用em strong吗?快来试试 text-emphasis
大家好,我是半夏,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注 点赞 加我微信:frontendpicker,一起学习交流前端,成为更优秀的工程师-关注公众号:搞前端的半夏,了解更多前端知 ...
- 《图解UE4渲染体系》Part 0 引擎基础
在介绍UE4渲染体系前,我们有必要来先看一下UE4是用什么样的方式来构建游戏场景数据的. 1 Object 在UE4中当我们说Object,通常是指代引擎代码中的UObject类,它是引擎里管理绝大部 ...
- SpringMVC的文件上传下载,异常处理,拦截器的小总结
文件的上传和下载 我们通常在访问网页时会使用到文件的上传与下载的功能,那么他是如何实现的呢? 1 下载: ResponseEntity :用于控制器方法的返回值类型,该控制器方法的返回值就是响应到浏览 ...
- 攻防世界-MISC:can_has_stdio?
这是攻防世界MISC高手进阶区的题目,题目如下: 点击下载附件一,解压后得到一个txt文件,打开后内容如下: 根据百度搜索的结果可知这是一种叫做BrainFuck的语言,BrainFuck是由Urba ...
- crontab和cron表达式详解
引言 我们在定时任务中经常能接触到cron表达式,但是在写cron表达式的时候我们会遇到各种各样版本的cron表达式,比如我遇到过5位.6位甚至7位的cron表达式,导致我一度搞混这些表达式.更严重的 ...
- 好客租房10-jsx的基本使用
1.1createElement()的问题 1繁琐不简洁 2不直观 无法一眼看出所描述的结构 3不优雅 用户体验不爽 React.createElement("div", ...
- typora的下载和基本的使用
目录 typora的下载和基本的使用 typora的下载 typora基本的使用 选择自己喜爱的主题 创建标题 进入编程环境 改变文本样式 插入链接 插入图片 有序列表 无序列表 创建表格 单选框 表 ...
- Dockerfile 使用 SSH
如果在书写 Dockerfile 时,有些命令需要使用到 SSH 连接,比如从私有仓库下载文件等,那么我们应该怎么做呢? Dockerfile 使用 SSH Dockerfile 文件配置 为了使得 ...
- 高度灵活可定制的PC布局:头部按钮、左边栏、右边栏、状态栏
什么是自适应布局 CabloyJS提供了一套布局管理器,实现自适应布局 关于自适应布局的概念,强烈建议先阅读以下两篇文章: 自适应布局:pc = mobile + pad 自适应布局:视图尺寸 什么是 ...
- JavaScript Number -> String
六种将Number类型转化为String类型的方法: 方法一:通过+运算符加上一个空字符串: eg:'' + 5 -> '5' 5 + '' -> '5' 方法二:toStrin ...