使用pip更新用户已安装的软件包

3
我在我的研究中使用了一堆Python包,我使用pip命令的--user选项将它们安装在我的主目录中。此外,还有一些包是由发行版的软件包管理器安装的。我想要一个pip命令,只升级我自己使用--user选项安装的包。
我尝试了推荐版本的pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs pip install -U,但似乎只适用于虚拟环境。pip freeze --local显示已安装用户和系统范围内的软件包。
有没有一种方法只升级本地用户安装的软件包?
3个回答

4
您可以使用这个简单的命令行一行代码来升级用户安装的软件包:
pip freeze --user | cut -d'=' -f1 | xargs pip install --user -U

3

我也遇到了这个问题,并创建了以下脚本。该脚本更新由pip发现并驻留在用户主目录中的任何软件包。通常,这应该是使用pip install --user安装的软件包。

#!/usr/bin/env python

# Starting point for this script:
# https://dev59.com/KXE85IYBdhLWcg3wikS-#5839291

import os
import subprocess
import pkg_resources

HOMEDIR = os.getenv('HOME')
homepkg = []

for dist in list(pkg_resources.working_set):
  if not dist.location.startswith(HOMEDIR):
    continue
  homepkg.append(dist.project_name)

if len(homepkg) == 0:
  print('No locally-installed packages, nothing to update.')
  raise SystemExit

# --no-deps is required because --upgrade by default is recursive and would try
# to update packages that are not from homedir (e.g. from /usr). 

subprocess.call(['pip', 'install', '--user', '--upgrade', '--no-deps'] + homepkg)

get_installed_distributions()函数已经不存在了,此外pip不应该被用作库,如此处所述:https://pip.pypa.io/en/latest/user_guide/#using-pip-from-your-program - mdeous

0

如果可能的话,我建议创建虚拟环境。

您只需使用sudo apt-get install python-virtualenv安装virtualenv,然后进入存储Python项目的文件夹,并在终端中输入virtualenv venv。之后,您可以像这样激活它:source venv/bin/activate

它的作用是创建几乎完整的Python副本(一些库仅链接以节省空间),并且在激活后你所做的任何操作都只会影响该副本,而不是全局环境。因此,您可以使用pip安装任何一组库,更新它们等等,而不会改变虚拟环境之外的任何内容。但别忘了在进行任何操作之前先激活它。


一个虚拟环境对我来说并不适用,因为我想要更改我的用户的全局环境。 - Max Linke
好的,这更像是一种替代建议,应该更容易做到,并且在大多数情况下都可以正常工作,但如果您真的需要更新全局环境,我不知道解决方案。 - Raven

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接