首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么python3 pip模块会找到python2库?

问为什么python3 pip模块会找到python2库?
EN

Stack Overflow用户
提问于 2015-03-21 13:36:09
回答 1查看 334关注 0票数 0

我正在尝试一个简单的代码片段,它通过以下脚本升级我安装的所有pip包:

代码语言:javascript
复制
# 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都有用,也就是说:

代码语言:javascript
复制
sudo python2 pip_upgrade.py
sudo python3 pip_upgrade.py

但是,我发现在尝试python3(python3.4)时,输出如下所示:

代码语言:javascript
复制
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的内容,但仍然是相同的问题。

那我哪里出问题了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-21 13:56:23

你的电话

代码语言:javascript
复制
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。

跑

代码语言:javascript
复制
pip --version

要检查python的哪个版本,pip脚本引用哪个版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29183328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档