我正在使用一堆python包进行我的研究,我使用pip的--user
选项安装在我的主目录中。还有一些软件包由我的发行版的软件包管理器安装用于其他方面。我想要一个pip命令,只使用--user
选项升级我自己安装的软件包。
我尝试了推荐版本pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs pip install -U
,但这似乎只能使用virtualenvs。 pip freeze --local
正在显示为我的用户和系统范围安装的软件包。
有没有办法只为我的用户升级本地安装的软件包?
答案 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安装任何一组库,更新它们等,并且您不会更改虚拟环境之外的任何内容。但是不要忘记在你做任何事之前先激活它。