Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >以脚本形式运行python库

以脚本形式运行python库

作者头像
DechinPhy
发布于 2022-09-02 09:05:23
发布于 2022-09-02 09:05:23
1.2K00
代码可运行
举报
文章被收录于专栏:Dechin的专栏Dechin的专栏
运行总次数:0
代码可运行

技术背景

当我们尝试运行python的帮助文档时,会看到如下这样的一个说明:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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的具体代码架构与相关模块内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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接口的调用方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from hadder import AddHydrogen
AddHydrogen('input.pdb', 'output.pdb')

对外开放的API接口就这么一个,较为简单。接下来我们就可以基于这个功能模块,去创建一个可以通过命令行来运行的方法。

创建__main__.py文件

当我们使用python3 -m模式来运行的时候,python会去自动索引到__main__.py这个文件作为入口文件,因此首先我们在根目录下创建一个__main__.py文件,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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文件中的代码内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# __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,使得我们可以在命令行里面输入相关的输入文件路径和输出文件路径。最终运行效果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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仓库的“三步走”方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ python3 setup.py check
$ python3 setup.py sdist bdist_wheel
$ twine upload --repository-url https://upload.pypi.org/legacy/ dist/*

这样一来,我们就可以通过pip来对我们的仓库进行安装和管理,比如可以使用如下的指令安装hadder:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ python3 -m pip install hadder --upgrade

总结概要

本文主要通过一个实际的案例,介绍了如何可以在命令行中调用和运行我们的python模块。“python -m”这个方案为我们提供了一个新的选项,这个运行方法以“main.py”文件为入口文件运行,结合python中常用的命令行工具argparse,我们就可以很容易的创建一个可以通过命令行运行和获取参数的python模块。并且可以使用twine上传到pypi网站上,用pip进行安装和管理,会更加的便捷。

版权声明

本文首发链接为:https://cloud.tencent.com/developer/article/2092977

作者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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
蓝牙芯片----BK34341开发笔记------快速入门(2)
编译成功后在目录\output\app下,会生成几个bin文件,用联机下载器烧录带CRC的bin文件,如图的bin
心跳包
2020/08/31
2.5K0
蓝牙芯片----BK34341开发笔记------快速入门(2)
关于KT6368A双模蓝牙芯片的BLE在ios的lightblue大数量数据测试
关于KT6368A双模蓝牙芯片的BLE在ios的lightblue app大数量数据测试
清月电子
2024/01/17
2010
关于KT6368A双模蓝牙芯片的BLE在ios的lightblue大数量数据测试
kt6368A双模蓝牙芯片无法透传 可能是什么问题呢
KT6368A蓝牙芯片,在使用上还是非常的简单,总共也就8个腿,焊接也是很容易的事情
清月电子
2023/11/15
2130
kt6368A双模蓝牙芯片无法透传 可能是什么问题呢
QT应用编程: 编写HC05串口蓝牙调试助手(Android系统APP)
完整工程源码下载地址(包含APK文件): https://download.csdn.net/download/xiaolong1126626497/19051787
DS小龙哥
2022/01/07
2.6K0
QT应用编程: 编写HC05串口蓝牙调试助手(Android系统APP)
一个蓝牙实战项目的掏肺总结
前不久一个在深圳的大学好友联系到我,他们公司需要做一个USB蓝牙接收器,功能大体如下:
用户2366192
2021/05/31
1.2K0
KT6368A蓝牙芯片发送指令设置中文蓝牙名是乱码 这个要如何处理
一、KT6368A蓝牙芯片为什么发送at指令设置中文spp蓝牙名,是乱码 这个要如何处理
清月电子
2023/11/15
2470
KT6368A蓝牙芯片发送指令设置中文蓝牙名是乱码 这个要如何处理
APP与硬件交互-蓝牙连接测试
7. UUID:蓝牙上的唯一标示符,为了区分不同服务和特征,就用UUID来表示。
用户5521279
2019/07/30
5.6K0
鸿蒙开发实战案例:蓝牙实现服务端和客户端通讯
本示例分为服务端和客户端两个功能模块。 服务端创建蓝牙服务实例,添加心率跳动服务。以心率跳动值作为特征值,通过notifyCharacteristicChanged接口将心率跳动特征值广播发送给连接到本服务端并订阅了该特征值变动通知的蓝牙客户端设备。
小帅聊鸿蒙
2025/02/23
1000
鸿蒙开发实战案例:蓝牙实现服务端和客户端通讯
R-Plan 手把手教你开发BLE微信小程序
背景 最近在测试BLE模块,本来想用别家的产品来测试我的BLE模块,经过一番询问,别家的BLE的MASTER模式只能配对自家的SLAVE模式。也就是说他不能配对我的BLE模块,这就让我郁闷了。绝望。 手机的BLE调试助手又不能自动化测试,需要手动调试。太麻烦。 之前我也写过一篇文章《Android BLE 开发》--初学者,这个安卓原生APP,对于一个没有任何安卓基础的我,花了3天的时间干了这个四不像的BLE安卓调试工具。原生的APP搭建环境就非常痛苦了,更何况开发。想要再次开发,想想还是算了。 所以想了想
Rice加饭
2022/05/10
1.3K0
R-Plan 手把手教你开发BLE微信小程序
用BW21-CBV-Kit做一个蓝牙温湿度计
本文介绍了安信可 BW21-CBV-Kit 开发板实现蓝牙温湿度计的DIY制作流程。
安信可科技
2025/03/19
970
Android BLE 蓝牙开发,连接蓝牙设备进行通讯
讲解如何通过 UUID 连接蓝牙设备。如果你针对 GATT 服务不太了解。那么这篇应该能够稍微帮助到你。
zinyan.com
2023/07/14
6K1
Android BLE 蓝牙开发,连接蓝牙设备进行通讯
QT应用编程: 编写低功耗BLE蓝牙调试助手(Android系统APP)
完整工程源码下载地址(包含APK文件): https://download.csdn.net/download/xiaolong1126626497/19051696
DS小龙哥
2022/01/07
4.1K0
QT应用编程: 编写低功耗BLE蓝牙调试助手(Android系统APP)
MASA MAUI Plugin 安卓蓝牙低功耗(一)蓝牙扫描
MAUI的出现,赋予了广大Net开发者开发多平台应用的能力,MAUI 是Xamarin.Forms演变而来,但是相比Xamarin性能更好,可扩展性更强,结构更简单。但是MAUI对于平台相关的实现并不完整。
JusterZhu
2022/12/07
1.5K0
MASA MAUI Plugin 安卓蓝牙低功耗(一)蓝牙扫描
零基础开发蓝牙设备
现在几乎每个人的手机都具备蓝牙功能,所以如果你的硬件设备也具备蓝牙通信功能,那么便可以很容易和手机建立通信,从而具备IOT物联网属性。但我们也知道蓝牙Ble(目前已发展到5.2版本)协议极其复杂,并不是所有人都需要去详细了解它,我们更多的需求是能够使用它就足够了。所以这里我们可以用shineblink.com提供的core物联网核心板,基于core我们能够在短短几分钟内只用几行代码就可以定制出我们自己的蓝牙设备,并且基于core配套的《免开发App》,我们甚至连手机端App开发的工作都省掉了。
shineblink
2020/11/29
1.2K0
零基础开发蓝牙设备
如何使用蓝牙实现OTA固件升级
作为一种低成本的近距离无线连接协议,蓝牙在现实生活中的应用非常广泛,各种嵌入式、物联网设备随处可见。基于这一特性,我们今天讲一下如何使用蓝牙实现OTA固件升级。
xiangzhihong
2022/10/31
3.7K0
微信小程序蓝牙开发,微信小程序 蓝牙通讯
客户的需求如下:通过微信小程序控制蓝牙ble设备(电子面膜),通过不同指令控制面膜的亮度和时间。
高久峰
2023/07/02
1.2K0
基于51设计的宠物防丢系统(蓝牙+Android上位机)
手机APP: 采用QT设计,程序支持跨平台编译运行(Android、IOS、Windows、Linux都可以编译运行,对应平台上QT的环境搭建,之前博客已经发了文章讲解)
DS小龙哥
2022/01/21
1K0
基于51设计的宠物防丢系统(蓝牙+Android上位机)
Arduino 入门项目系列 (5) - Android 手机通过蓝牙语音控制 LED
为了加快 Arduino 的学习,决定周一这一天的上午也用来学习 Arduino。今天还是继续学习蓝牙模块的使用。实现通过蓝牙模块,在手机端语音控制 LED 的功能。这种思路后续再扩宽的话,加上动手能力强的话,完全自己搭建智能家居系统。
caoqi95
2019/03/28
2.3K0
Arduino 入门项目系列 (5) - Android 手机通过蓝牙语音控制 LED
物联网来了,你还不会蓝牙开发?
随着物联网时代的到来,越来越多的智能硬件设备开始流行起来,比如智能手环、心率检测仪、以及各式各样的智能家具和玩具类产品。安卓4.3(API 18)为BLE的核心功能提供平台支持和API,App可以利用它来发现设备、查询服务和读写特性。相比传统的蓝牙,BLE更显著的特点是低功耗。本文主要讲解Android低功耗蓝牙的api使用以及蓝牙扫描、连接、发送数据、接收数据等一系列操作,并主要介绍本人封装的BleLib蓝牙库,非常适合蓝牙初学者使用,只需要一行代码注入就OK了,而且用法也极其简单,下面会专门讲解BleLib库的使用。
陈宇明
2020/12/15
1K0
物联网来了,你还不会蓝牙开发?
App Inventor 2 低功耗蓝牙(BLE) 硬件接入、数据通信及IO控制
低功耗蓝牙(BLE)以低功耗、低成本、开发简便逐渐被广泛应用,本文主要介绍一款较为通用、价格低廉的BLE设备从零开始如何利用App Inventor 2开发一款自己专属的手机蓝牙App应用。
用户10956490
2024/01/31
1K0
App Inventor 2 低功耗蓝牙(BLE) 硬件接入、数据通信及IO控制
推荐阅读
相关推荐
蓝牙芯片----BK34341开发笔记------快速入门(2)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验