[英]pip freeze: show only packages installed via pip
我想知道哪些python軟件包是通過pip安裝的,哪些是通過rpm安裝的。
我在任何virtualenv 外面運行,並想知道是否通過pip安裝了一些軟件包。
背景:我們的政策是在“根級”使用RPM。 我想找到政策被打破的地方。
假設:
pip install --user <package_name>
以進行本地用戶包安裝。 默認情況下,debian系統安裝的軟件包安裝在:
/usr/lib/python2.7/dist-packages/
pip安裝包安裝在:
/usr/bin/local/python2.7/dist-packages
要查看可以在python shell中運行的所有安裝路徑:
import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
根據pip freeze docs -l
將顯示任何本地安裝的軟件包(即非全局軟件包)但是,您需要處於正確的環境中。
pip freeze -l
如果Virtualenvs發揮作用:他們將使用site-packages
目錄。
locate -r '/site-packages$'
另請注意,通過此方法根本不會找到安裝到其他目錄中的任何軟件包: 使用pip將Python軟件包安裝到其他目錄中?
最后一招 ,使用pip show檢查pip中的確切安裝路徑。 實際上,只需從pip獲取名稱,將其輸入到pip show並過濾Name - > Location map的輸出。
pip freeze | awk '{split($0,a,"="); print a[1]}' | xargs -P 5 -I {} pip show {} | grep 'Name\|Location'
怎么樣稍微轉動問題,只檢查什么屬於rpms,什么不屬於。 嘗試:
import os, sys, subprocess, glob
def type_printed(pth, rpm_dirs=False):
if not os.path.exists(pth):
print(pth + ' -- does not exist')
return True
FNULL = open(os.devnull, 'w')
if rpm_dirs or not os.path.isdir(pth):
rc = subprocess.call(['rpm', '-qf', pth], stdout=FNULL, stderr=subprocess.STDOUT)
if rc == 0:
print(pth + ' -- IS RPM')
return True
print(pth + ' -- NOT an RPM')
return True
return False
for pth in sys.path:
if type_printed(pth):
continue
contents = glob.glob(pth + '/*')
for subpth in contents:
if type_printed(subpth, rpm_dirs=True):
continue
print(subpth + ' -- nothing could be determined for sure')
並通過類似的方式輸出輸出
grep -e '-- NOT' -e '-- nothing could be determined'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.