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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

推薦幾個(gè)不錯(cuò)的Python庫(kù)

Spinal FPGA ? 來(lái)源:Spinal FPGA ? 2023-12-16 11:05 ? 次閱讀

編 者 按

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


推薦幾個(gè)不錯(cuò)的Python庫(kù)

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

rich

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

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

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

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

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

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

Fire

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

importfire

defadd(x, y):
returnx + y

defmultiply(x, y):
returnx * y

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


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

$ pythonexample.pyadd1020
30
$ pythonexample.pymultiply 1020
200


基本零成本實(shí)現(xiàn)一個(gè)CLI工具,簡(jiǎn)直太香了。

在VSCode中配合autoDocstring - Python Docstring Generator這個(gè)插件可以方便的為函數(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()

運(yùn)行時(shí):

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


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


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

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

審核編輯:湯梓紅

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

    關(guān)注

    31

    文章

    5253

    瀏覽量

    119205
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207912
  • 數(shù)據(jù)中心
    +關(guān)注

    關(guān)注

    16

    文章

    4517

    瀏覽量

    71637
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4753

    瀏覽量

    84079

原文標(biāo)題:數(shù)據(jù)中心邏輯搬磚要會(huì)的——幾個(gè)好用的Python庫(kù)

文章出處:【微信號(hào):Spinal FPGA,微信公眾號(hào):Spinal FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    動(dòng)態(tài)庫(kù)封裝成python模塊的方法

    之前的文章 將靜態(tài)庫(kù)封裝成 python 模塊中講解了如何將靜態(tài)庫(kù)封裝成 python 模塊,靜態(tài)庫(kù)封裝相對(duì)來(lái)說(shuō)還是有點(diǎn)復(fù)雜,今天來(lái)介紹下動(dòng)
    發(fā)表于 07-13 15:24 ?524次閱讀

    Python機(jī)器學(xué)習(xí)常用庫(kù)

    Python是一種面向?qū)ο蟮慕忉屝陀?jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,具有豐富和強(qiáng)大的庫(kù),再加上其簡(jiǎn)單、易學(xué)、速度快、開(kāi)源免費(fèi)、可移植性、可擴(kuò)展性以及面向?qū)ο蟮奶攸c(diǎn),Python成為2017年最受歡迎的最受
    發(fā)表于 03-26 16:29

    2018年受到眾多開(kāi)發(fā)者關(guān)注的7個(gè)Python庫(kù)

    幾個(gè)還不太知名的庫(kù)引起了Python開(kāi)發(fā)者的關(guān)注。
    的頭像 發(fā)表于 10-02 09:30 ?4660次閱讀

    Python幾個(gè)表情包

    今天制作表情包用到的技術(shù)還是之前提到的Turtle庫(kù),可以從之前的文章除了畫(huà)佩奇我們還要玩點(diǎn)更高級(jí)的,去學(xué)習(xí)Turtle的常用語(yǔ)法,然后就是PIL庫(kù),之前通過(guò)這篇文章:Python騷操作|用P
    的頭像 發(fā)表于 02-11 11:13 ?5059次閱讀

    140種Python標(biāo)準(zhǔn)庫(kù)、第三方庫(kù)和外部工具都有了

    Python標(biāo)準(zhǔn)庫(kù)Python自帶的標(biāo)準(zhǔn)庫(kù)。Python標(biāo)準(zhǔn)庫(kù)無(wú)需安裝,只需要先通過(guò)impor
    的頭像 發(fā)表于 08-02 09:24 ?3239次閱讀

    幾個(gè)Python繪圖Turtle庫(kù)的范例資料免費(fèi)下載

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

    ADM1266 Python庫(kù)

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

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

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

    如何安裝常用Python庫(kù)

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

    Python常用的幾個(gè)命令介紹

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

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

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

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

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

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

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

    如何使用Python和PinPong庫(kù)控制Arduino

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

    python中如何引入math庫(kù)

    Python中,要使用math庫(kù),首先需要先引入它。math庫(kù)Python的一個(gè)標(biāo)準(zhǔn)庫(kù),它提供了許多數(shù)學(xué)函數(shù)和常數(shù)。通過(guò)使用math
    的頭像 發(fā)表于 11-22 11:03 ?3379次閱讀