最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python 依賴庫太多了該如何管理

 更新時(shí)間:2019年11月08日 13:32:03   作者:編程派  
在 Python 的項(xiàng)目中,如何管理所用的全部依賴庫呢?最主流的做法是維護(hù)一份“requirements.txt”,記錄下依賴庫的名字及其版本號(hào),需要的朋友可以參考下

在 Python 的項(xiàng)目中,如何管理所用的全部依賴庫呢?最主流的做法是維護(hù)一份“requirements.txt”,記錄下依賴庫的名字及其版本號(hào)。

那么,如何來生成這份文件呢?在上篇文章《由淺入深:Python 中如何實(shí)現(xiàn)自動(dòng)導(dǎo)入缺失的庫?》中,我提到了一種常規(guī)的方法:

pip freeze 
>
 requirements
.
txt

這種方法用起來方便,但有幾點(diǎn)不足:

  • 它搜索依賴庫的范圍是全局環(huán)境,因此會(huì)把項(xiàng)目之外的庫加入進(jìn)來,造成冗余(一般是在虛擬環(huán)境中使用,但還是可能包含無關(guān)的依賴庫)
  • 它只會(huì)記錄以“pip install”方式安裝的庫
  • 它對(duì)依賴庫之間的依賴關(guān)系不做區(qū)分
  • 它無法判斷版本差異及循環(huán)依賴等情況

…………

可用于項(xiàng)目依賴管理的工具有很多,本文主要圍繞與 requirements.txt 文件相關(guān)的、比較相似卻又各具特色的 4 個(gè)三方庫,簡要介紹它們的使用方法,羅列一些顯著的功能點(diǎn)。至于哪個(gè)是最好的管理方案呢?賣個(gè)關(guān)子,請(qǐng)往下看……

pipreqs

這是個(gè)很受歡迎的用于管理項(xiàng)目中依賴庫的工具,可以用“pip install pipreqs”命令來安裝。它的主要特點(diǎn)有:

  • 搜索依賴庫的范圍是基于目錄的方式,很有針對(duì)性
  • 搜索的依據(jù)是腳本中所 import 的內(nèi)容
  • 可以在未安裝依賴庫的環(huán)境上生成依賴文件
  • 查找軟件包信息時(shí),可以指定查詢方式(只在本地查詢、在 PyPi 查詢、或者在自定義的 PyPi 服務(wù))

基本的命令選項(xiàng)如下:

Usage
:

 pipreqs 
[
options
]
 
<path>



Options
:

 
--
use
-
local
   
Use
 ONLY 
local
 
package
 info instead of querying 
PyPI

 
--
pypi
-
server 
<url>
 
Use
 custom 
PyPi
 server

 
--
proxy 
<url>
   
Use
 
Proxy
,
 parameter will be passed to requests library
.
 
You
 can also just 
set
 the

       environments parameter 
in
 your terminal
:

       $ 
export
 HTTP_PROXY
=
"http://10.10.1.10:3128"

       $ 
export
 HTTPS_PROXY
=
"https://10.10.1.10:1080"

 
--
debug    
Print
 debug information

 
--
ignore 
<dirs>
...
 
Ignore
 extra directories

 
--
encoding 
<charset>
 
Use
 encoding parameter 
for
 file open

 
--
savepath 
<file>
  
Save
 the list of requirements 
in
 the given file

 
--
print
    
Output
 the list of requirements 
in
 the standard output

 
--
force    
Overwrite
 existing requirements
.
txt

 
--
diff 
<file>
   
Compare
 modules 
in
 requirements
.
txt to project imports
.

 
--
clean 
<file>
  
Clean
 up requirements
.
txt 
by
 removing modules that are 
not
 imported 
in
 project
.

其中需注意,很可能遇到編碼錯(cuò)誤:UnicodeDecodeError:'gbk'codec can't decode byte 0xae in。需要指定編碼格式“--encoding=utf8”。

在已生成依賴文件“requirements.txt”的情況下,它可以強(qiáng)行覆蓋、比對(duì)差異以及清除不再使用的依賴項(xiàng)。

pigar

pigar 同樣可以根據(jù)項(xiàng)目路徑來生成依賴文件,而且會(huì)列出依賴庫在文件中哪些位置使用到了。這個(gè)功能充分利用了 requirements.txt 文件中的注釋,可以提供很豐富的信息。

pigar 對(duì)于查詢真實(shí)的導(dǎo)入源很有幫助,例如 bs4 模塊來自 beautifulsoup4 庫, MySQLdb 則來自于 MySQL_Python 庫??梢酝ㄟ^“-s”參數(shù),查找真實(shí)的依賴庫。

$ pigar 
-
s bs4 
MySQLdb

它使用解析 AST 的方式,而非正則表達(dá)式的方式,可以很方便地從 exec/eval 的參數(shù)、文檔字符串的文檔測(cè)試中提取出依賴庫。

另外,它對(duì)于不同 Python 版本的差異可以很好地支持。例如, concurrent.futures 是 Python 3.2+ 的標(biāo)準(zhǔn)庫,而在之前早期版本中,需要安裝三方庫 futures ,才能使用它。pigar 做到了有效地識(shí)別區(qū)分。(PS:pipreqs 也支持這個(gè)識(shí)別,詳見這個(gè)合入:https://github.com/bndr/pipreqs/pull/80

pip-tools

pip-tools 包含一組管理項(xiàng)目依賴的工具:pip-compile 與 pip-sync,可以使用命令“pip install pip-tools”統(tǒng)一安裝。它最大的優(yōu)勢(shì)是可以精準(zhǔn)地控制項(xiàng)目的依賴庫。

兩個(gè)工具的用途及關(guān)系圖如下:

pip-compile 命令主要用于生成依賴文件和升級(jí)依賴庫,另外它可以支持 pip 的“Hash-Checking Mode ”,并支持在一個(gè)依賴文件中嵌套其它的依賴文件(例如,在 requirements.in 文件內(nèi),可以用“-c requirements.txt”方式,引入一個(gè)依賴文件)。

它可以根據(jù) setup.py 文件來生成 requirements.txt,假如一個(gè) Flask 項(xiàng)目的 setup.py 文件中寫了“install_requires=['Flask']”,那么可以用命令來生成它的所有依賴:

$ pip
-
compile
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile --output-file requirements.txt setup.py
#
click
==
6.7
# via flask
flask
==
0.12
.
2
itsdangerous
==
0.24
# via flask
jinja2
==
2.9
.
6
# via flask
markupsafe
==
1.0
# via jinja2
werkzeug
==
0.12
.
2
# via flask

在不使用 setup.py 文件的情況下,可以創(chuàng)建“requirements.in”,在里面寫入“Flask”,再執(zhí)行“pip-compile requirements.in”,可以達(dá)到跟前面一樣的效果。

pip-sync 命令可以根據(jù) requirements.txt 文件,來對(duì)虛擬環(huán)境中進(jìn)行安裝、升級(jí)或卸載依賴庫(注意:除了 setuptools、pip 和 pip-tools 之外)。這樣可以有針對(duì)性且按需精簡地管理虛擬環(huán)境中的依賴庫。

另外,該命令可以將多個(gè)“*.txt”依賴文件歸并成一個(gè):

$ pip-sync dev-requirements.txt requirements.txt

pipdeptree

它的主要用途是展示 Python 項(xiàng)目的依賴樹,通過有層次的縮進(jìn)格式,顯示它們的依賴關(guān)系,不像前面那些工具只會(huì)生成扁平的并列關(guān)系。

除此之外,它還可以:

  • 生成普遍適用的 requirements.txt 文件
  • 逆向查找某個(gè)依賴庫是怎么引入進(jìn)來的
  • 提示出相互沖突的依賴庫
  • 可以發(fā)現(xiàn)循環(huán)依賴,進(jìn)行告警
  • 生成多種格式的依賴樹文件(json、graph、pdf、png等等)

它也有缺點(diǎn),比如無法穿透虛擬環(huán)境。如果要在虛擬環(huán)境中工作,必須在該虛擬環(huán)境中安裝 pipdeptree。因?yàn)榭缣摂M環(huán)境會(huì)出現(xiàn)重復(fù)或沖突等情況,因此需要限定虛擬環(huán)境。但是每個(gè)虛擬環(huán)境都安裝一個(gè) pipdeptree,還是挺讓人難受的。

好啦,4 種庫介紹完畢,它們的核心功能都是分析依賴庫,生成 requirements.txt 文件,同時(shí),它們又具有一些差異,補(bǔ)齊了傳統(tǒng)的 pip 的某些不足。

本文不對(duì)它們作全面的測(cè)評(píng),只是選取了一些主要特性進(jìn)行介紹,好在它們安裝方便(pip install xxx),使用也簡單,感興趣的同學(xué)不妨一試。

更多豐富的細(xì)節(jié),請(qǐng)查閱官方文檔:

https://github.com/bndr/pipreqs

https://github.com/damnever/pigar

https://github.com/jazzband/pip-tools

https://github.com/naiquevin/pipdeptree

總結(jié)

以上所述是小編給大家介紹的Python 依賴庫太多了該怎么管理,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • Python3.X 線程中信號(hào)量的使用方法示例

    Python3.X 線程中信號(hào)量的使用方法示例

    信號(hào)量semaphore 是一個(gè)變量,控制著對(duì)公共資源或者臨界區(qū)的訪問。信號(hào)量維護(hù)著一個(gè)計(jì)數(shù)器,指定可同時(shí)訪問資源或者進(jìn)入臨界區(qū)的線程數(shù)。下面這篇文章主要給大家介紹了關(guān)于Python3.X 線程中信號(hào)量的使用方法,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07
  • Python 批量合并多個(gè)txt文件的實(shí)例講解

    Python 批量合并多個(gè)txt文件的實(shí)例講解

    今天小編就為大家分享一篇Python 批量合并多個(gè)txt文件的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • python實(shí)現(xiàn)線性插值的示例

    python實(shí)現(xiàn)線性插值的示例

    線性插值是針對(duì)一維數(shù)據(jù)的插值方法,它根據(jù)一維數(shù)據(jù)序列中需要插值的點(diǎn)的左右臨近兩個(gè)數(shù)據(jù)來進(jìn)行數(shù)值估計(jì),這篇文章主要介紹了python實(shí)現(xiàn)線性插值,需要的朋友可以參考下
    2022-12-12
  • Python如何使用EasyOCR工具識(shí)別圖像文本

    Python如何使用EasyOCR工具識(shí)別圖像文本

    EasyOCR?是?PyTorch?實(shí)現(xiàn)的一個(gè)光學(xué)字符識(shí)別?(OCR)?工具,這篇文章主要介紹了Python如何使用EasyOCR工具識(shí)別圖像文本,需要的朋友可以參考下
    2023-04-04
  • Python?實(shí)現(xiàn)圖像特效中的油畫效果

    Python?實(shí)現(xiàn)圖像特效中的油畫效果

    這篇文章主要是為大家簡單介紹一下圖像添加油畫特效的基本原理以及代碼實(shí)現(xiàn),文中的示例代碼很詳細(xì),對(duì)我們學(xué)習(xí)或者工作有一點(diǎn)的價(jià)值,感興趣的小伙伴可以了解一下
    2021-12-12
  • 基于Python打造高效便捷的目錄結(jié)構(gòu)生成器

    基于Python打造高效便捷的目錄結(jié)構(gòu)生成器

    這篇文章主要為大家詳細(xì)介紹了如何使用Python開發(fā)一個(gè)目錄結(jié)構(gòu)生成器,它不僅能夠幫助用戶高效地生成文件夾目錄結(jié)構(gòu),還具備了很多智能化的功能,感興趣的小伙伴可以了解下
    2025-04-04
  • python 使用opencv 把視頻分割成圖片示例

    python 使用opencv 把視頻分割成圖片示例

    今天小編就為大家分享一篇python 使用opencv 把視頻分割成圖片示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python?matplotlib實(shí)戰(zhàn)之散點(diǎn)圖繪制

    Python?matplotlib實(shí)戰(zhàn)之散點(diǎn)圖繪制

    散點(diǎn)圖,又名點(diǎn)圖、散布圖、X-Y圖,是將所有的數(shù)據(jù)以點(diǎn)的形式展現(xiàn)在平面直角坐標(biāo)系上的統(tǒng)計(jì)圖表,本文主要為大家介紹了如何使用Matplotlib繪制散點(diǎn)圖,需要的可以參考下
    2023-08-08
  • Python排序算法之堆排序算法

    Python排序算法之堆排序算法

    堆排序看字面意思是一種排序方法,那堆是什么呢?堆是一個(gè)近似完全二叉樹的結(jié)構(gòu),并同時(shí)滿足堆積的性質(zhì)。其實(shí)堆排序是指利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法。
    2023-01-01
  • Sanic框架路由用法實(shí)例分析

    Sanic框架路由用法實(shí)例分析

    這篇文章主要介紹了Sanic框架路由用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Sanic框架路由的原理、請(qǐng)求參數(shù)、請(qǐng)求類型、重定向等相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07

最新評(píng)論

黎城县| 新乡县| 焉耆| 阿图什市| 固阳县| 松原市| 乡宁县| 康马县| 遵义县| 惠州市| 刚察县| 黑河市| 洪洞县| 平谷区| 电白县| 河西区| 都江堰市| 商丘市| 富阳市| 聂荣县| 海伦市| 凤庆县| 七台河市| 驻马店市| 岐山县| 丁青县| 汝阳县| 兰州市| 宜兰市| 乳源| 长泰县| 湄潭县| 平阴县| 大邑县| 乌什县| 醴陵市| 崇仁县| 闽清县| 定陶县| 密山市| 武乡县|