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

时间:2014-09-12 09:37:39

标签: python pip

我正在使用一堆python包进行我的研究,我使用pip的--user选项安装在我的主目录中。还有一些软件包由我的发行版的软件包管理器安装用于其他方面。我想要一个pip命令,只使用--user选项升级我自己安装的软件包。

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

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

3 个答案:

答案 0 :(得分:3)

我也遇到过这个问题并创建了以下脚本。该脚本更新由pip找到的任何包,这些包位于用户的主目录中。通常,这应该是与pip install --user一起安装的软件包。

#!/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 :(得分:1)

您可以使用以下简单的命令行单行代码升级用户安装的软件包:

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

答案 2 :(得分:0)

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

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

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