0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

推薦幾個不錯的Python庫

Spinal FPGA ? 來源:Spinal FPGA ? 2023-12-16 11:05 ? 次閱讀

編 者 按

作為一個在數(shù)據(jù)中心搬磚的邏輯開發(fā),日常不是僅僅簡單的寫寫RTL就可以完事兒的。在數(shù)據(jù)中心,你可能連板卡都看不到,日常常打交道的,也就是PCIe。作為邏輯版本的生產(chǎn)者,出現(xiàn)問題往往需要自己有詳細的定位手段和方式(沒有誰比設計者更清楚邏輯的功能。專門的軟件人員來做當然沒問題,但增加溝通成本),那么一套自己常用的軟件工具還是非常有必要的。對于這種工具型工具,C就顯得太笨重了,而Python才是首選。


推薦幾個不錯的Python庫

ctypes
作為常與PCIe打交道的人來說,99%的定位方式都是通過寄存器來進行定位信息。在python中自然也可以通過mmap來實現(xiàn)PCIe Bar空間的映射,但有一個問題就是Python下的mmap一次讀或者寫有時往往會產(chǎn)生兩次TLP讀寫。這么高深的問題自然邏輯開發(fā)人員是解不了的。那這時候最好的方式就是通過ctypes來實現(xiàn)與C的打通,mmap與寄存器讀寫功能API交給C代碼來做,生成.so后Python通過ctypes來實現(xiàn)調用即可,方便簡潔。

rich

linux環(huán)境里,基本上就是一個命令行窗口,那么基本上就是各種打印了。有些時候想基于Python的print自己實現(xiàn)各種功能還是太略顯麻煩了。那么rich庫是一個很好的選擇。

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

Rich 是一個 Python 庫,可以為您在終端中提供富文本和精美格式。

Rich 的 API 讓在終端輸出顏色和樣式變得很簡單。此外,Rich 還可以繪制漂亮的表格、進度條、markdown、語法高亮的源代碼以及?;厮菪畔ⅲ╰racebacks)等——開箱即用。 網(wǎng)上關于rich庫的介紹挺多的,這里就不拾人牙慧了。借助rich的豐富功能,可以基于少量的代碼來實現(xiàn)相對比較豐富的功能。

舉個例子,對于設計而言,維護寄存器/文檔的一致性除非代碼用腳本生成的那么其他情況下往往項目做到最后越來越文不對題。在邏輯開發(fā)中,我會基于SpinalHDL中的regif來在代碼中進行定義寄存器實現(xiàn),在其上面基礎上重定義了它文檔生成的代碼,用來能夠生成整個系統(tǒng)的寄存器文檔。日常會輸出一份html寄存器文檔以及一份Json格式寄存器文檔。隨后在做集成工具時會通過命令行參數(shù)直接將json文件直接傳給命令行工具,解析后借助rich的table直接能夠一鍵dump所有的寄存器,并精確給到每個寄存器每個比特的注釋說明,這比讀一個寄存器,再去對照寄存器文檔去看什么意思簡直不要方便太多!

當然,借助chatgpt來實現(xiàn)基于rich定義各種顯示功能這種體力勞動更能節(jié)省思考和動手能力。

Fire

既然定位是工具類型的,那么我們最終需要的肯定是一個命令行工具CLIs。這里推薦使用Fire這個庫。不為別的,它最簡單,簡單到令人發(fā)指!

importfire

defadd(x, y):
returnx + y

defmultiply(x, y):
returnx * y

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


在上面這段代碼里,我們定義的功能函數(shù)僅需把函數(shù)注冊到Fire里就能自動生成命令行工具:

$ pythonexample.pyadd1020
30
$ pythonexample.pymultiply 1020
200


基本零成本實現(xiàn)一個CLI工具,簡直太香了。

在VSCode中配合autoDocstring - Python Docstring Generator這個插件可以方便的為函數(shù)增加注釋,從而在上面生成的命令行中很方便的生成幫助信息

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


這種腳本在不同的機器上運行,自然是不希望直接將代碼復制到機器上的,畢竟還要安裝各種依賴包,有時候這些機器往往是不聯(lián)網(wǎng)的。那么最簡單的方式就是通過pyinstaller打包成一個可執(zhí)行文件了。pyinstaller網(wǎng)上資料也比較多,也可以記住chatgpt來獲取如何打包的方式。


比如針對上面的需要帶.so的打包,我們僅需針對python main文件執(zhí)行一條指令即可:

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

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5271

    瀏覽量

    119648
  • Linux
    +關注

    關注

    87

    文章

    11171

    瀏覽量

    208474
  • 數(shù)據(jù)中心

    關注

    16

    文章

    4577

    瀏覽量

    71806
  • python
    +關注

    關注

    54

    文章

    4758

    瀏覽量

    84289

原文標題:數(shù)據(jù)中心邏輯搬磚要會的——幾個好用的Python庫

文章出處:【微信號:Spinal FPGA,微信公眾號:Spinal FPGA】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    動態(tài)封裝成python模塊的方法

    之前的文章 將靜態(tài)封裝成 python 模塊中講解了如何將靜態(tài)封裝成 python 模塊,靜態(tài)封裝相對來說還是有點復雜,今天來介紹下動
    發(fā)表于 07-13 15:24 ?575次閱讀

    Python機器學習常用

    Python是一種面向對象的解釋型計算機程序設計語言,具有豐富和強大的,再加上其簡單、易學、速度快、開源免費、可移植性、可擴展性以及面向對象的特點,Python成為2017年最受歡迎的最受
    發(fā)表于 03-26 16:29

    2018年受到眾多開發(fā)者關注的7個Python

    幾個還不太知名的引起了Python開發(fā)者的關注。
    的頭像 發(fā)表于 10-02 09:30 ?4713次閱讀

    Python幾個表情包

    今天制作表情包用到的技術還是之前提到的Turtle,可以從之前的文章除了畫佩奇我們還要玩點更高級的,去學習Turtle的常用語法,然后就是PIL,之前通過這篇文章:Python騷操作|用P
    的頭像 發(fā)表于 02-11 11:13 ?5131次閱讀

    140種Python標準、第三方和外部工具都有了

    Python標準Python自帶的標準。Python標準無需安裝,只需要先通過impor
    的頭像 發(fā)表于 08-02 09:24 ?3268次閱讀

    幾個Python繪圖Turtle的范例資料免費下載

    本文檔的主要內容詳細介紹的是幾個Python繪圖Turtle的范例資料免費下載。
    發(fā)表于 06-04 08:00 ?0次下載

    ADM1266 Python

    ADM1266 Python
    發(fā)表于 03-23 15:47 ?1次下載
    ADM1266 <b class='flag-5'>Python</b><b class='flag-5'>庫</b>

    Python連接Oracle數(shù)據(jù)

    Python連接Oracle數(shù)據(jù)(深圳市核達中遠通電源技術股份有限公司招聘)-該文檔為Python連接Oracle數(shù)據(jù)講解文檔,是一份不錯
    發(fā)表于 09-24 17:20 ?6次下載
    <b class='flag-5'>Python</b>連接Oracle數(shù)據(jù)<b class='flag-5'>庫</b>

    如何安裝常用Python

    Python作為一種流行的編程語言,擁有豐富的第三方資源,這些可以幫助開發(fā)者輕松實現(xiàn)各種功能,從數(shù)據(jù)分析到Web開發(fā),從機器學習到圖像處理,涵蓋了各個領域。在Python的開發(fā)過程
    的頭像 發(fā)表于 04-14 12:11 ?1099次閱讀

    Python常用的幾個命令介紹

    Python是一種功能強大的編程語言,廣泛用于數(shù)據(jù)分析、人工智能和Web開發(fā)等領域。在使用Python時,需要掌握一些基本的命令,以便更好地管理和運行代碼。下面將介紹Python常用的幾個
    的頭像 發(fā)表于 06-21 17:12 ?2239次閱讀

    SQLite數(shù)據(jù)python的區(qū)別

    SQLite數(shù)據(jù)python的區(qū)別 SQLite是一種輕量級關系型數(shù)據(jù)管理系統(tǒng),是一個嵌入式的數(shù)據(jù)引擎。Python是一種高級編程語
    的頭像 發(fā)表于 08-28 16:41 ?777次閱讀

    python有什么用 如何用python創(chuàng)建數(shù)據(jù)

    python有什么用 如何用python創(chuàng)建數(shù)據(jù) Python是一種高級編程語言,可以用于開發(fā)各種類型的應用程序和工具。它的廣泛應用使它在編程領域中極為受歡迎。
    的頭像 發(fā)表于 08-28 16:41 ?1113次閱讀

    python讀取數(shù)據(jù)數(shù)據(jù) python查詢數(shù)據(jù) python數(shù)據(jù)連接

    python讀取數(shù)據(jù)數(shù)據(jù) python查詢數(shù)據(jù) python數(shù)據(jù)連接
    的頭像 發(fā)表于 08-28 17:09 ?1684次閱讀

    如何使用Python和PinPong控制Arduino

    與傳感器和其他物理設備集成的應用程序。如果您已經(jīng)掌握了Python的基礎知識,那么您可以通過使用Python來控制Arduino來入門。本文目的主要是向您展示如何使用PinPong通過Pyt
    的頭像 發(fā)表于 10-13 10:59 ?835次閱讀
    如何使用<b class='flag-5'>Python</b>和PinPong<b class='flag-5'>庫</b>控制Arduino

    python中如何引入math

    Python中,要使用math,首先需要先引入它。mathPython的一個標準,它提供了許多數(shù)學函數(shù)和常數(shù)。通過使用math
    的頭像 發(fā)表于 11-22 11:03 ?3755次閱讀