0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

推荐几个不错的Python库

Spinal FPGA 来源:Spinal FPGA 2023-12-16 11:05 次阅读

编 者 按

作为一个在数据中心搬砖的逻辑开发,日常不是仅仅简单的写写RTL就可以完事儿的。在数据中心,你可能连板卡都看不到,日常常打交道的,也就是PCIe。作为逻辑版本的生产者,出现问题往往需要自己有详细的定位手段和方式(没有谁比设计者更清楚逻辑的功能。专门的软件人员来做当然没问题,但增加沟通成本),那么一套自己常用的软件工具还是非常有必要的。对于这种工具型工具,C就显得太笨重了,而Python才是首选。


推荐几个不错的Python库

ctypes
作为常与PCIe打交道的人来说,99%的定位方式都是通过寄存器来进行定位信息。在python中自然也可以通过mmap来实现PCIe Bar空间的映射,但有一个问题就是Python下的mmap一次读或者写有时往往会产生两次TLP读写。这么高深的问题自然逻辑开发人员是解不了的。那这时候最好的方式就是通过ctypes来实现与C的打通,mmap与寄存器读写功能API交给C代码来做,生成.so后Python通过ctypes来实现调用即可,方便简洁。

rich

linux环境里,基本上就是一个命令行窗口,那么基本上就是各种打印了。有些时候想基于Python的print自己实现各种功能还是太略显麻烦了。那么rich库是一个很好的选择。

82149f36-9bbc-11ee-8b88-92fbcf53809c.jpg

Rich 是一个 Python 库,可以为您在终端中提供富文本和精美格式。

Rich 的 API 让在终端输出颜色和样式变得很简单。此外,Rich 还可以绘制漂亮的表格、进度条、markdown、语法高亮的源代码以及栈回溯信息(tracebacks)等——开箱即用。 网上关于rich库的介绍挺多的,这里就不拾人牙慧了。借助rich的丰富功能,可以基于少量的代码来实现相对比较丰富的功能。

举个例子,对于设计而言,维护寄存器/文档的一致性除非代码用脚本生成的那么其他情况下往往项目做到最后越来越文不对题。在逻辑开发中,我会基于SpinalHDL中的regif来在代码中进行定义寄存器实现,在其上面基础上重定义了它文档生成的代码,用来能够生成整个系统的寄存器文档。日常会输出一份html寄存器文档以及一份Json格式寄存器文档。随后在做集成工具时会通过命令行参数直接将json文件直接传给命令行工具,解析后借助rich的table直接能够一键dump所有的寄存器,并精确给到每个寄存器每个比特的注释说明,这比读一个寄存器,再去对照寄存器文档去看什么意思简直不要方便太多!

当然,借助chatgpt来实现基于rich定义各种显示功能这种体力劳动更能节省思考和动手能力。

Fire

既然定位是工具类型的,那么我们最终需要的肯定是一个命令行工具CLIs。这里推荐使用Fire这个库。不为别的,它最简单,简单到令人发指!

importfire

defadd(x, y):
returnx + y

defmultiply(x, y):
returnx * y

if__name__ == '__main__':
fire.Fire({
'add': add,
'multiply': multiply,
})


在上面这段代码里,我们定义的功能函数仅需把函数注册到Fire里就能自动生成命令行工具:

$ pythonexample.pyadd1020
30
$ pythonexample.pymultiply 1020
200


基本零成本实现一个CLI工具,简直太香了。

在VSCode中配合autoDocstring - Python Docstring Generator这个插件可以方便的为函数增加注释,从而在上面生成的命令行中很方便的生成帮助信息

importfire
defadd(x:int, y:int)-> int:
"""add operation

Args:
x (int): data
y (int): data

Returns:
int: sum
"""
returnx + y

defmultiply(x:int, y:int)-> int:
"""multiply operation

Args:
x (int): data
y (int): data

Returns:
int: multiply
"""
returnx*y

defversion()-> str:
"""get version info

Returns:
str: version number
"""
return"1.2.3"

if__name__ == '__main__':
fire.Fire()

运行时:

python3test.py--help
NAME
test.py

SYNOPSIS
test.pyGROUP | COMMAND

GROUPS
GROUP isone of the following:

fire
The Python Fire module.

COMMANDS
COMMAND isone of the following:

add
addoperation

multiply
multiply operation

version
getversioninfo

python3test.pyadd--help

NAME
test.pyadd- addoperation

SYNOPSIS
test.pyaddXY

DESCRIPTION
addoperation

POSITIONAL ARGUMENTS
X
Type: int
data
Y
Type: int
data

NOTES
You can also use flags syntaxforPOSITIONAL ARGUMENTS



白嫖的即视感!

pyinstaller


这种脚本在不同的机器上运行,自然是不希望直接将代码复制到机器上的,毕竟还要安装各种依赖包,有时候这些机器往往是不联网的。那么最简单的方式就是通过pyinstaller打包成一个可执行文件了。pyinstaller网上资料也比较多,也可以记住chatgpt来获取如何打包的方式。


比如针对上面的需要带.so的打包,我们仅需针对python main文件执行一条指令即可:

pyinstaller --onefile --add-binary='./clib/a.so:.' Test.py

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5037

    浏览量

    117764
  • Linux
    +关注

    关注

    87

    文章

    10992

    浏览量

    206744
  • 数据中心
    +关注

    关注

    15

    文章

    4189

    浏览量

    70114
  • python
    +关注

    关注

    51

    文章

    4678

    浏览量

    83476

原文标题:数据中心逻辑搬砖要会的——几个好用的Python库

文章出处:【微信号:Spinal FPGA,微信公众号:Spinal FPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    2017年10大Python总结

    ,我们以博客的形式贴出了Python社区中流行的好作品。现在,以同样的方式来为2017年做个总结。这次的榜单充满了浓浓的机器学习风,请那些非机器学习的大神见谅,不过,这次我们确实有点儿偏心
    发表于 01-23 14:48

    Python机器学习常用

    Python是一种面向对象的解释型计算机程序设计语言,具有丰富和强大的,再加上其简单、易学、速度快、开源免费、可移植性、可扩展性以及面向对象的特点,Python成为2017年最受欢迎的最受
    发表于 03-26 16:29

    python数据分析的类

    Python之所以这么流行,这么好用,就是因为Python提供了大量的第三方的,开箱即用,非常方便,而且还免费哦,学Python的同学里估计有30%以上是为了做数据分析师或者数据挖掘
    发表于 05-10 15:18

    Python的BaseHTTPServer详解

    Py之BaseHTTPServer:Python之BaseHTTPServer的简介、安装、使用方法之详细攻略
    发表于 12-26 10:42

    Python之ipython详解

    Py之ipython:Python之ipython的简介、安装、使用方法详细攻略
    发表于 12-26 10:50

    Python的skimage详解

    Py之skimage:Python之skimage的简介、安装、使用方法之详细攻略
    发表于 12-27 10:04

    Python之docx详解

    Py之docx:Python之docx简介、安装、使用方法详细攻略
    发表于 12-27 16:44

    Python的pyaudio详解

    Py之pyaudio:Python之pyaudio简介、安装、使用方法之详细攻略
    发表于 12-27 16:47

    python的Queue详解

    Py之Queue:python之Queue的简介、安装、使用方法之详细攻略
    发表于 12-28 10:09

    【建议收藏】Python大全

    ` 通用urlib -网络(stdlib)。requests -网络。grab -网络(基于pycurl)。pycurl -网络(绑定libcurl)ullib3 -
    发表于 09-06 15:58

    python与数据的交互

    python与数据的交互-sqlalchemy
    发表于 05-01 14:50

    python如何连接MySql数据

    Python入门(python连接MySql数据)还能怎么记,大开眼界!
    发表于 06-14 07:48

    什么是python包、模块和

    ; from demo import foo成功导入 foo.py>>> from demo import bar成功导入 bar.py3. Python 是指一定功能的代码集合
    发表于 03-09 16:48

    Python几个表情包

    今天制作表情包用到的技术还是之前提到的Turtle库,可以从之前的文章除了画佩奇我们还要玩点更高级的,去学习Turtle的常用语法,然后就是PIL库,之前通过这篇文章:Python骚操作|用Python来P图也介绍过PIL的几个
    的头像 发表于 02-11 11:13 4872次阅读

    Python常用的几个命令介绍

    Python是一种功能强大的编程语言,广泛用于数据分析、人工智能和Web开发等领域。在使用Python时,需要掌握一些基本的命令,以便更好地管理和运行代码。下面将介绍Python常用的几个
    的头像 发表于 06-21 17:12 1860次阅读