有没有办法找到使用easy_install或pip安装的所有Python PyPI包?我的意思是,不包括发行版工具(在Debian上的apt-get)安装的所有东西。
当前回答
至少对于Ubuntu(也许其他的)来说是这样工作的(灵感来自于这个线程之前的一篇文章):
printf "Installed with pip:";
pip list 2>/dev/null | gawk '{print $1;}' | while read; do pip show "${REPLY}" 2>/dev/null | grep 'Location: /usr/local/lib/python2.7/dist-packages' >/dev/null; if (( $? == 0 )); then printf " ${REPLY}"; fi; done; echo
其他回答
在保罗·伍尔考克的回答中,
pip freeze > requirements.txt
将在当前位置的活动环境中创建一个包含所有已安装包和已安装版本号的需求文件。运行
pip install -r requirements.txt
将安装需求文件中指定的包。
至少对于Ubuntu(也许其他的)来说是这样工作的(灵感来自于这个线程之前的一篇文章):
printf "Installed with pip:";
pip list 2>/dev/null | gawk '{print $1;}' | while read; do pip show "${REPLY}" 2>/dev/null | grep 'Location: /usr/local/lib/python2.7/dist-packages' >/dev/null; if (( $? == 0 )); then printf " ${REPLY}"; fi; done; echo
如果Debian在pip安装默认目标方面表现得像最近的Ubuntu版本,那么它非常简单:它安装到/usr/local/lib/而不是/usr/lib (apt默认目标)。检查https://askubuntu.com/questions/173323/how-do-i-detect-and-remove-python-packages-installed-via-pip/259747 # 259747
我是一个ArchLinux用户,当我尝试使用pip时,我遇到了同样的问题。以下是我在《Arch》中的解决方法。
find /usr/lib/python2.7/site-packages -maxdepth 2 -name __init__.py | xargs pacman -Qo | grep 'No package'
这里的关键是/usr/lib/python2.7/site-packages,这是pip安装到的目录,YMMV。qo是Arch的package管理器检查文件所有权的方法。当没有包拥有该文件时,没有包是它给出的返回的一部分:棘手的解决方法:我正在查询__init__.py,因为pacman -Qo在涉及到目录时有点无知:(
为了在其他发行版上做到这一点,你必须找出pip在哪里安装东西(只需sudo pip install一些东西),如何查询文件的所有权(Debian/Ubuntu的方法是dpkg -S),以及“没有包拥有该路径”的返回是什么(Debian/Ubuntu是没有路径找到匹配模式)。Debian/Ubuntu用户,注意:如果你给dpkg -S一个符号链接,它会失败。首先使用realpath解决它。是这样的:
find /usr/local/lib/python2.7/dist-packages -maxdepth 2 -name __init__.py | xargs realpath | xargs dpkg -S 2>&1 | grep 'no path found'
Fedora用户可以尝试(谢谢@eddygeek):
find /usr/lib/python2.7/site-packages -maxdepth 2 -name __init__.py | xargs rpm -qf | grep 'not owned by any package'
PIP冻结列出所有已安装的包,即使不是通过PIP /easy_install。 在CentOs/Redhat上可以找到通过rpm安装的包。
如果你使用Anaconda python发行版,你可以使用conda list命令来查看用什么方法安装了什么:
user@pc:~ $ conda list
# packages in environment at /anaconda3:
#
# Name Version Build Channel
_ipyw_jlab_nb_ext_conf 0.1.0 py36h2fc01ae_0
alabaster 0.7.10 py36h174008c_0
amqp 2.2.2 <pip>
anaconda 5.1.0 py36_2
anaconda-client 1.6.9 py36_0
获取pip安装的条目(可能包括pip本身):
user@pc:~ $ conda list | grep \<pip
amqp 2.2.2 <pip>
astroid 1.6.2 <pip>
billiard 3.5.0.3 <pip>
blinker 1.4 <pip>
ez-setup 0.9 <pip>
feedgenerator 1.9 <pip>
当然,你可能只想选择第一列,你可以这样做(如果需要,不包括pip):
user@pc:~ $ conda list | awk '$3 ~ /pip/ {if ($1 != "pip") print $1}'
amqp
astroid
billiard
blinker
ez-setup
feedgenerator
最后,你可以获取这些值,并使用以下命令卸载它们:
user@pc:~ $ conda list | awk '$3 ~ /pip/ {if ($1 != "pip") print $1}' | xargs pip uninstall -y
注意,pip卸载时使用了-y标志,以避免在删除时必须给出确认。
推荐文章
- 有办法在Python中使用PhantomJS吗?
- 如何在Python中将if/else压缩成一行?
- 如何在Python 3中使用pip。Python 2.x
- 如何让IntelliJ识别常见的Python模块?
- Django:“projects”vs“apps”
- 如何列出导入的模块?
- 转换Python程序到C/ c++代码?
- 如何从gmtime()的时间+日期输出中获得自epoch以来的秒数?
- 在python模块文档字符串中放入什么?
- 我如何在Django中过滤一个DateTimeField的日期?
- 在Python中用索引迭代列表
- -e,——editable选项在pip install中什么时候有用?
- 使用pip命令从requirements.txt升级python包
- Django更改默认的runserver端口
- 输入对象的datetime。Datetime没有Datetime属性