关于python:使用pip更新用户安装的软件包

update user installed packages with pip

我使用大量的python包进行研究,我使用pip的--user选项安装在我的home目录中。还有一些包是由我的发行版的包管理器为其他事情安装的。我想要一个pip命令,它只升级我用--user选项安装的包。

我尝试了推荐的版本pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs pip install -U,但这似乎只适用于使用virtualenvs。pip freeze --local显示为我的用户和系统范围安装的包。

有没有办法只升级本地为我的用户安装的软件包?


我也遇到了这个问题,创建了下面的脚本。该脚本将更新pip找到的并位于用户主目录中的所有包。通常,这应该是与pip install --user一起安装的包。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/env python

# Starting point for this script:
# http://stackoverflow.com/a/5839291

import os
import pip
import subprocess

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

for dist in pip.get_installed_distributions():
  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)


您可以使用这个简单的命令行一行程序升级用户安装的包:

1
pip freeze --user | cut -d'=' -f1 | xargs pip install --user -U


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

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

它所做的是创建几乎完整的python副本(一些库只是链接以节省空间),激活后所做的一切只影响该副本,而不是全局环境。因此,您可以使用PIP安装任何库集,更新它们等,并且不会在虚拟环境之外更改任何内容。但在你做任何事情之前不要忘记先激活它。