導航:首頁 > 編程語言 > pythonbz2模塊

pythonbz2模塊

發布時間:2024-04-15 23:03:45

⑴ Loguru:python 日誌終極解決方案

日誌的作用非常重要,日誌可以記錄用戶的操作、程序的異常,還可以為數據分析提供依據,日誌的存在意義就是為了能夠在程序在運行過程中記錄錯誤,方便維護和調試,能夠快速定位出錯的地方,減少維護成本。每個程序員都應該知道,不是為了記錄日誌而記錄日誌,日誌也不是隨意記的。要實現能夠只通過日誌文件還原整個程序執行的過程,達到能透明地看到程序里執行情況,每個線程、每個過程到底執行到哪的目的。日誌就像飛機的黑匣子一樣,應當能夠復原異常的整個現場乃至細節!

最常見的是把輸出函數 print() 當作日誌記錄的方式,直接列印各種提示信息,常見於個人練習項目里,通常是懶得單獨配置日誌,而且項目太小不需要日誌信息,不需要上線,不需要持續運行,完整的項目不推薦直接列印日誌信息,現實中也幾乎沒有人這么做。

我們可以在不少小項目裡面看到作者自己寫了一個日誌模板,通常利用 print() 或者 sys.stdout 稍微封裝一下即可實現簡單的日誌輸出,這里的 sys.stdout 是 Python 中的標准輸出流, print() 函數是對 sys.stdout 的高級封裝,當我們在 Python 中列印對象調用 print(obj) 時候,事實上是調用了 sys.stdout.write(obj+'\n') , print() 將內容列印到了控制台,然後追加了一個換行符 \n 。

自寫日誌模板適合比較小的項目,可以按照自己的喜好編寫模板,不需要太多復雜配置,方便快捷,但是這種記錄日誌的方式並不是很規范,有可能你自己覺得閱讀體驗不錯,但是別人在接觸你的項目的時候往往需要花費一定的時間去學習日誌的邏輯、格式、輸出方式等,比較大的項目同樣不推薦這種方法。

一個簡單的自寫日誌模板舉例:

日誌模板 log.py:

調用日誌模塊:

日誌輸出:

在一個完整的項目中,大多數人都會引入專門的日誌記錄庫,而 Python 自帶的標准庫 logging 就是專門為日誌記錄而生的,logging 模塊定義的函數和類為應用程序和庫的開發實現了一個靈活的事件日誌系統。由標准庫模塊提供日誌記錄 API 的關鍵好處是所有 Python 模塊都可以使用這個日誌記錄功能。所以,你的應用日誌可以將你自己的日誌信息與來自第三方模塊的信息整合起來。

logging 模塊雖然強大,但是其配置也是比較繁瑣的,在大型項目中通常需要單獨初始化日誌、配置日誌格式等等,K哥在日常使用中通常都會對 logging 做如下的封裝寫法,使日誌可以按天保存,保留15天的日誌,可以配置是否輸出到控制台和文件,如下所示:

輸出日誌:

它在控制台中是這樣的:

當然,如果你不需要很復雜的功能,希望簡潔一點,僅僅需要在控制台輸出一下日誌的話,也可以只進行簡單的配置:

對於 logging 模塊,即便是簡單的使用,也需要自己定義格式,這里介紹一個更加優雅、高效、簡潔的第三方模塊:loguru,官方的介紹是:Loguru is a library which aims to bring enjoyable logging in Python. Loguru 旨在為 Python 帶來愉快的日誌記錄。這里引用官方的一個 GIF 來快速演示其功能:

Loguru 僅支持 Python 3.5 及以上的版本,使用 pip 安裝即可:

Loguru 的主要概念是只有一個:logger

控制台輸出:

可以看到不需要手動設置,Loguru 會提前配置一些基礎信息,自動輸出時間、日誌級別、模塊名、行號等信息,而且根據等級的不同,還自動設置了不同的顏色,方便觀察,真正做到了開箱即用!

如果想自定義日誌級別,自定義日誌格式,保存日誌到文件該怎麼辦?與 logging 模塊不同,不需要 Handler,不需要 Formatter,只需要一個 add() 函數就可以了,例如我們想把日誌儲存到文件:

我們不需要像 logging 模塊一樣再聲明一個 FileHandler 了,就一行 add() 語句搞定,運行之後會發現目錄下 test.log 裡面同樣出現了剛剛控制台輸出的 debug 信息。

與 add() 語句相反, remove() 語句可以刪除我們添加的配置:

此時控制台會輸出兩條 debug 信息:

而 test.log 日誌文件裡面只有一條 debug 信息,原因就在於我們在第二條 debug 語句之前使用了 remove() 語句。

Loguru 對輸出到文件的配置有非常強大的支持,比如支持輸出到多個文件,分級別分別輸出,過大創建新文件,過久自動刪除等等。 下面我們來詳細看一下 add() 語句的詳細參數:

基本語法:

基本參數釋義:

當且僅當 sink 是協程函數時,以下參數適用:

當且僅當 sink 是文件路徑時,以下參數適用:

這么多參數可以見識到 add() 函數的強大之處,僅僅一個函數就能實現 logging 模塊的諸多功能,接下來介紹幾個比較常用的方法。

add() 函數的 rotation 參數,可以實現按照固定時間創建新的日誌文件,比如設置每天 0 點新創建一個 log 文件:

設置超過 500 MB 新創建一個 log 文件:

設置每隔一個周新創建一個 log 文件:

add() 函數的 retention 參數,可以設置日誌的最長保留時間,比如設置日誌文件最長保留 15 天:

設置日誌文件最多保留 10 個:

也可以是一個 datetime.timedelta 對象,比如設置日誌文件最多保留 5 個小時:

add() 函數的 compression 參數,可以配置日誌文件的壓縮格式,這樣可以更加節省存儲空間,比如設置使用 zip 文件格式保存:

其格式支持: gz 、 bz2 、 xz 、 lzma 、 tar 、 tar.gz 、 tar.bz2 、 tar.xz

Loguru 在輸出 log 的時候還提供了非常友好的字元串格式化功能,相當於 str.format() :

輸出:

在 Loguru 里可以直接使用它提供的裝飾器就可以直接進行異常捕獲,而且得到的日誌是無比詳細的:

日誌輸出:

在控制台的輸出是這樣的:

相比 Logging,Loguru 無論是在配置方面、日誌輸出樣式還是異常追蹤,都遠優於 Logging,使用 Loguru 無疑能提升開發人員效率。本文僅介紹了一些常用的方法,想要詳細了解可參考 Loguru 官方文檔 或關注 Loguru GitHub 。

⑵ python 濡備綍瀵煎叆bz2妯″潡 ubuntu

bz2鏄痯ython鑷甯︾殑鏍囧噯搴擄紝鐩存帴import灝卞彲浠ヤ簡錛屼笉榪囦綘鏃㈢劧鎻愰棶浜嗭紝搴旇ユ槸閬囧埌闂棰樹簡銆
濡傛灉python鏄浣犺嚜宸辯紪璇戠殑錛岄渶瑕佸畨瑁卋zip2-devel鍚庡啀緙栬瘧錛屽惁鐫bz2鏃犳硶浣跨敤銆
濡傛灉瑙e喅浜嗘偍鐨勯棶棰樿烽噰綰籌紒
濡傛灉鏈瑙e喅璇風戶緇榪介棶

⑶ 在centos 7上安裝並配置python 3.6環境,怎樣使用3.6.1 版本

在CentOS 7上安裝並配置Python 3.6環境
在純凈的 CentOS 系統上安裝 Python 環境主要有兩種辦法。 一種是通過源碼編譯安裝,另外一種就是安裝已經打好的 RPM 包。依照個人習慣,我們先來看一下如何通過源碼編譯的方式安裝 Python 3.6 並且配置虛擬環境。
作者:TaoBeier來源:segmentfault|2017-06-26 18:30
移動端
收藏
分享

拖了很久沒有更新,抱歉啦~ 今天受邀寫篇如何在 CentOS 7 上配置 Python 3 環境的文章。往常我都選擇直接把我早年寫的一篇文章源碼編譯MongoDB丟過去,讓他們看其中的源碼編譯 Python 那一節,不過那節寫的其實不太詳細,而且最近被很多人催,所以還是單獨寫一篇好了。
當前最新的 CentOS 7.3 默認安裝的是 Python 2 ,並且默認的官方 yum 源中不提供 Python 3 的安裝包。有些用戶想要升級使用 Python 3 但實際可能有各種各樣的問題,導致出錯,反觀一下激進的 Fedora 社區,在23的時候,就將默認的版本修改成了 Python3 (如果我沒記錯的話)。
先說下我所使用的系統環境, 一個新創建的 Docker 容器。 使用 cat /etc/redhat-release 可以看到運行的是 CentOS 7.3 版本。

在純凈的 CentOS 系統上安裝 Python 環境主要有兩種辦法。 一種是通過源碼編譯安裝,另外一種就是安裝已經打好的 RPM 包。依照個人習慣,我們先來看一下如何通過源碼編譯的方式安裝 Python 3.6 並且配置虛擬環境。
使用源碼進行編譯安裝
基礎環境
先安裝安裝幾個必須的包,以方便後續的操作
➜ yum install wget gcc make ➜ # wget 用於下載源碼包 ➜ # gcc 和 make 用於編譯

上 Python的官網 下載源碼包
➜ wget

解包,解壓
➜ xz -d Python-3.6.1.tar.xz ➜ tar -xvf Python-3.6.1.tar

編譯
➜ cd Python-3.6.1 ➜ ./configure --prefix=/usr/local/python3.6 --enable-optimizations ➜

先解釋下上面的參數,--prefix 是預期安裝目錄,--enable-optimizations 是優化選項(LTO,PGO 等)加上這個 flag 編譯後,性能有 10% 左右的優化(如果沒記錯的話),但是這會明顯的增加編譯時間。不過關於 LTO 和 PGO 其實不在今天文章的討論范圍內,建議感興趣的可以看看 GCC 中 LTO 的具體實現。我應該不太可能去寫相關的文章 哈哈哈 畢竟寫起來就會停不下來。
接下來
➜ make ➜ make install

如圖,會看到出錯了,提示 zlib not available 所以,我們需要裝一下依賴
➜ yum install zlib-devel

那為什麼需要這個依賴包呢, 其實是因為 Python 有個很重要的內建模塊 zipimport 用於從 Zip 壓縮包中導入模塊。 而如果沒有 zlib 的包,那麼就無法進行解壓縮了,也自然該模塊就不能使用了。
當我們的依賴安裝好之後,重新執行上面的編譯安裝的步驟,發現執行成功。
➜ /usr/local/python3.6/bin/python3 --version Python 3.6.1

此刻,我們的 Python 3 也就安裝成功了。
檢查
編譯安裝完還遠遠不夠,我們來做些檢查。
當我們運行 Python 終端,輸入 import bz2 的時候,會發現沒有這個模塊。如果你對這個模塊不熟悉,那也沒關系。我們輸入 import sqlite3熟悉 Python 的同學應該對 sqlite3 不會太陌生,但如果你還是不熟悉的話,那你按方向鍵試試看。有沒有發現,輸出變成了^[[D^[[A 類似這樣的內容?

熟悉 Python 源碼的同學,肯定知道我要說什麼了。但是假如你不熟悉,沒關系,我來告訴你。正常來講,在終端下我們預期當輸入上方向鍵,會顯示上一條命令,輸入左方向鍵,可以將游標移動到左側。但現實和我們的預期不同,什麼原因?
這里涉及到了一點點關於輸入設備的歷史原因,簡單來說就是需要有個模塊來對用戶的輸入進行轉義。回到本文的重點,就是我們編譯安裝的時候缺少了 readline 這個模塊。既然已經發現了問題,那解決的辦法其實很簡單
➜ yum install readline-devel

安裝完成後,重復上面的步驟,編譯&&安裝即可。
再檢查
前面只是解決了方向鍵輸入的問題,但是我提到的那兩個模塊還是 import 不進來,那我們仔細的看看我們的編譯過程的輸出。其中有這樣的一段(依據系統環境的不同,輸出可能也是不一致的)
Python build finished successfully! The necessary bits to build these optional moles were not found: _curses bz2 _dbm _gdbm _lzma _sqlite3 _tkinter readline To find the necessary bits, look in setup.py in detect_moles() for the mole's name.

按照上面的提示,很明顯,我們缺少了一些(可選的)模塊,這些模塊假如你覺得自己不會用到,那也可以不理會它。這些模塊,我用到的會多一些,甚至是那個一般人都不會碰的 TK 模塊 哈哈哈。解決方式就只是裝一下對應的模塊即可。
➜ # 解決 import bz2 報錯 ➜ yum install bzip2-devel ➜ # 解決 import curses 報錯 ➜ yum install ncurses-devel ➜ # 解決 import sqlite3 報錯 ➜ yum install sqlite-devel ➜ # 解決 _dbm _gdbm 缺失提醒 ➜ yum install gdbm-devel ➜ # 解決 _lzma 缺失提醒 ➜ yum install xz-devel ➜ # 解決 _tkinter 缺失提醒 ➜ yum install tk-devel ➜ # 解決 readline 缺失提醒及方向鍵行為非預期的問題 ➜ yum install readline-devel

當這些模塊都裝完,重新編譯會發現提醒已經消失,安裝即可。

使用 rpm 包進行安裝
先來介紹一下 IUS 這個社區,名字的全寫是【Inline with Upstream Stable】取首字母,它主要是一個提供新版本RPM包的社區。具體使用可以查看官方文檔 簡單說來就只要按下面的命令操作即可。
➜ yum -y install

添加 IUS 之後,先創建緩存元數據,再進行安裝即可
➜ yum makecache ➜ yum install python36u ➜ yum -y install python36u-pip ➜ yum -y install python36u-devel

完成後直接終端輸入 python3 即可。
環境配置
上面只是寫了 Python 的安裝,如果是使用 RPM 的方式安裝的話,那直接是可用的。但如果是源碼編譯的,總不至於每次都輸入一大串路徑吧。所以解決方法很簡單,加個鏈接即可。
➜ ln -s /usr/local/python3.6/bin/python3 /usr/bin/python3

另外,當系統中存在多個 Python 版本的時候,盡量去避免環境污染。我個人比較推薦使用 virtualenv 創建獨立的虛擬環境,我日常中也是這樣用的。不過,當我們安裝完 Python 3.6 後,可以直接執行下面的命令進行虛擬環境的創建。
➜ python3 -m venv py3 ➜ source py3/bin/activate (py3) ➜ python -V Python 3.6.1

總結
CentOS 7 上安裝Python 3.6 主要有兩種方式,源碼編譯和安裝 RPM 包。
對於想快速使用源碼配置環境但並不想關心具體原因的讀者,可以直接使用我GitHub上提供的這個腳本進行安裝
另外Python 3.6 可直接使用 python3 -m venv venv_name 創建虛擬環境。

閱讀全文

與pythonbz2模塊相關的資料

熱點內容
情歌戀曲 電影 瀏覽:264
法國高分電影有哪些預言者 瀏覽:968
命令怎麼學 瀏覽:818
李采譚的影片 瀏覽:679
吃屎的電影叫什麼頭像惡心 瀏覽:790
《新媽媽的目的》演員表 瀏覽:188
何家駒電影大全 瀏覽:941
雷軍的編程代碼 瀏覽:452
怎麼把wps轉換為pdf格式的文件 瀏覽:55
天津網關伺服器雲空間 瀏覽:689
韓國電影交換的的一天BH的女演員 瀏覽:552
腐劇網耽美電影 瀏覽:910
台灣絕版電影一箭雙雕 瀏覽:883
訓誡文sp管教mf 瀏覽:932
搜索軟體如何加密 瀏覽:905
車載高清視頻下載的網站 瀏覽:656
吃哺乳媽媽奶水小說 瀏覽:960
進棧演算法代碼 瀏覽:786
抗日戰爭電影100部老電影 瀏覽:139
重生為楊過 瀏覽:579