使用 pip 安裝了一個 Python 的第三方模塊的時候,總會安裝其依賴的其他模塊。而當我們卸載的時候,卻不能將其依賴的模塊一併刪除。現在我想要達到的效果就是當我刪除某一個模塊的時候,我希望將其依賴的模塊也刪掉。
想要達到這個目標,需要知道下面這些東西:
- pip show <模塊名> 這個命令行命令可以查看一個包的詳細信息,包括這個包的依賴關係。重要的一點是,如果輸入的模塊包根本不存在,則什麼東西都不會打印
如果模塊不存在,則什麼都不會打印
xlwings 模塊的依賴
通過上面的圖,我們可以知道 xlwings 這個模塊依賴 comtypes 這個模塊。
- 我們可以通過 os 模塊中的 popen() 函數來得到命令行命令打印的東西
test.gif
-
pip uninstall -y <模塊名> 這個命令可以刪除一個模塊, -y 表示不需要按確認。
-
os.system() 函數可以執行一條 shell 命令
開始寫一個卸載程序
首先編寫一個可以查看一個模塊依賴的函數
def check_dependents(module_name):
"""
查看一個模塊的依賴
:param module_name: 模塊名
:return: module_name 所依賴的模塊的列表
"""
with os.popen('pip show %s' % module_name) as p:
dependents = p.readlines()
if not len(dependents):
return None
dependents = dependents[-1]
dependents = dependents.split(':')[-1].replace(' ', '').strip()
if dependents:
dependents = dependents.split(',')
else:
dependents = None
return dependents
if __name__=='__main__':
check_dependents('ipython')
查看 ipython 模塊的依賴
遞歸刪除模塊
import os
def remove(module_name):
"""
遞歸地卸載一個模塊
:param module_name: 模塊名稱
:return: None
"""
dependents = check_dependents(module_name)
if dependents:
for package in dependents:
remove(package)
os.system('pip uninstall -y %s' % module_name)
完整的程序
import os
def check_dependents(module_name):
"""
查看一個模塊的依賴
:param module_name: 模塊名
:return: module_name 所依賴的模塊的列表
"""
with os.popen('pip show %s' % module_name) as p:
dependents = p.readlines()
if not len(dependents):
return None
dependents = dependents[-1]
dependents = dependents.split(':')[-1].replace(' ', '').strip()
if dependents:
dependents = dependents.split(',')
else:
dependents = None
return dependents
def remove(module_name):
"""
遞歸地卸載一個模塊
:param module_name: 模塊名稱
:return: None
"""
dependents = check_dependents(module_name)
if dependents:
for package in dependents:
remove(package)
os.system('pip uninstall -y %s' % module_name)
if __name__ == '__main__':
pkg_name = input('請輸入要卸載的第三方模塊包: ')
remove(pkg_name)
演示卸載 ipython 模塊