我正在尝试一个简单的代码片段,它通过以下脚本升级我安装的所有pip包:
# pip_upgrade.py
import pip
from subprocess import call
black_list = ['scipy', 'PySide', 'python-apt']
failed_list = []
for dist in pip.get_installed_distributions():
dist_name = dist.project_name
if dist_name in black_list:
continue
rc = call(("pip install --upgrade " + dist.project_name).split(), shell=False)
if rc != 0:
failed_list.append(dist_name)
print('=' * 80)
print('\n'.join(failed_list))我希望这对python2和python3都有用,也就是说:
sudo python2 pip_upgrade.py
sudo python3 pip_upgrade.py但是,我发现在尝试python3(python3.4)时,输出如下所示:
Requirement already up-to-date: Send2Trash in /usr/local/lib/python2.7/dist-packages
Cleaning up...
Requirement already up-to-date: certifi in /usr/local/lib/python2.7/dist-packages
Cleaning up...
...
Requirement already up-to-date: wheel in /usr/lib/python2.7/dist-packages
Cleaning up...
...这表明python3版本仍然试图列出python2库。
我还取消了PYTHONPATH,列表sys.path在使用python3时没有包含任何关于python2的内容,但仍然是相同的问题。
那我哪里出问题了?
发布于 2015-03-21 13:56:23
你的电话
rc = call(("pip install --upgrade " + dist.project_name).split(), shell=False) 是在系统上运行默认"pip“的系统调用。
因此,如果您使用python2或python3运行这一行,您将得到完全相同的行为。
相反,您应该安装两个版本的pip (用于python2的pip和用于python3的pip)。
然后调用python2-pip install stuff在您的python2安装上安装,调用python3-pip install stuff在您的python3安装上安装它。
你似乎在使用linux。因此,只需安装与您的软件包管理器两个pip包。根据发行版的不同,pip for python2被称为pip、pip2、python3 2或python2-pip,而pip for python3则可以称为pip、pip3、pip-python3或python3-pip。
跑
pip --version要检查python的哪个版本,pip脚本引用哪个版本。
https://stackoverflow.com/questions/29183328
复制相似问题