Python3.6 ImportError:无法导入名称'main'Linux RHEL6

时间:2017-04-28 08:00:29

标签: python linux amazon-web-services pip rhel6

我的最终目标是下载并安装awscli http://docs.aws.amazon.com/cli/latest/userguide/awscli-install-linux.html

似乎需要python和pip来实现我的目标。

通过yum安装python对我不起作用,所以我手动下载并安装了python3,如下所示:

wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz
tar xf Python-3.6.1.tar.xz
cd Python-3.6.1.tar.xz
./configure
make
sudo make altinstall

当我这样做时

  

pip3.6 --version

我明白了:

Traceback (most recent call last):
  File "/usr/local/bin/pip3.6", line 7, in <module>
    from pip import main
ImportError: cannot import name 'main'

环境: RHEL 6.6 通过ssh访问

发生了什么事?如何在我的linux机箱上正确安装pip和python3.6?

编辑:

尝试通过yum安装时失败,所以我试图避免使用yum:

[asemani@rcdc9pfda5r Python-3.6.1]$ sudo yum -y install python-pip

[sudo] password for asemeani: 
Loaded plugins: security
Setting up Install Process
No package python-pip available.
Error: Nothing to do

另一个编辑:

导入sys后再调用sys.path这就是我得到的:

[asemani@rcdc9pfda5r Python-3.6.1]$ python3.6
Python 3.6.1 (default, Apr 28 2017, 11:03:27) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/usr/local/lib/python36.zip', '/usr/local/lib/python3.6', '/usr/local/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/site-packages']
>>> quit()
[asemani@rcdc9pfda5r Python-3.6.1]$ ls -l /usr/local/lib/python3.6/site-packages
total 32
-rw-------  1 root root  126 Apr 27 23:45 easy_install.py
drwx------ 11 root root 4096 Apr 27 23:45 pip
drwx------  2 root root 4096 Apr 27 23:45 pip-9.0.1.dist-info
drwx------  5 root root 4096 Apr 27 23:45 pkg_resources
drwx------  2 root root 4096 Apr 27 23:45 __pycache__
-rw-r--r--  1 root root  119 Apr 27 23:45 README.txt
drwx------  5 root root 4096 Apr 27 23:45 setuptools
drwx------  2 root root 4096 Apr 27 23:45 setuptools-28.8.0.dist-info

10 个答案:

答案 0 :(得分:68)

您需要像这样编辑pip3文件(您的路径可能不同):

nano /Library/Frameworks/Python.framework/Versions/3.6/bin/pip3

并更改导入主线,使其显示:

from pip._internal import main

在此更改后,我的pip3开始工作,我在macOS上。如果您使用的是Linux,那么您的路径可能类似于 / usr / bin / pip3

我从这个帖子中找到了这个提示和更多信息: see here

答案 1 :(得分:18)

我的操作系统是Linux Mint 18

sudo nano /usr/bin/pip3

更改

from pip import main

from pip._internal import main

答案 2 :(得分:17)

不要直接调用pip / pip3,这是不同用户在不同位置的快捷方式,当你升级pip时它们维护得不好(检查&#39;哪个pip&#39;和'sudo pip&#39;)。

 $ sudo python -m pip install xxx  #for python2 
 $ sudo python3 -m pip install xxx  #for python3

这些命令没有快捷方式,直接调用pip模块,pip模块维护得很好(也适用于Windows)

答案 3 :(得分:6)

sudo chmod -R a+rx /usr/local/lib/python3.6/site-packages

您可以在ls -l /usr/local/lib/python3.6/site-packages输出中看到问题,即您的pip目录只能由所有者读取,即root。

答案 4 :(得分:5)

执行cd /usr/bin

然后sudo nano pip以编辑pip文件

from pip import main更改为from pip._internal import main

这将解决问题

答案 5 :(得分:3)

尝试以下方法解决问题直到解决问题

sudo python -m pip --version
>> pip 10.0.1 from /usr/local/lib/python2.7/site-packages/pip (python 2.7)
sudo python -m pip install numpy --upgrade
>> Requirement already up-to-date: numpy in /usr/local/lib/python2.7/site-packages (1.14.2)

答案 6 :(得分:1)

我并不完全知道答案,但是:该错误表明脚本可以找到名为pip某些包,但不是正确的包。可能是旧版本的pip,在创建main方法之前从后面开始(你可以从python shell中检查pip.__version__)。

我愿意打赌你还有另一个旧版本的python,它有自己的pip版本。由于某种原因,你的pythonpath正在加载那个而不是py3.6的那个。

可以考虑的一些可能性:

  • 我对redhat一无所知,但是有一些特定于redhat的方法可以选择使用“默认python”吗?

  • pip脚本顶部的shebang行是#!/usr/bin/env python而不是像#!/usr/bin/python3.6那样吗?

  • 是否可以修改shell的PATH以便使用下载的python?

  • 是否可以更改您的PYTHONPATH(我认为它会被添加到python中的sys.path的默认值;查找它)以便它加载新的pip而不是旧的pip?< / p>

答案 7 :(得分:1)

我的操作系统是Mac sierra,我不得不更改以下行

from pip import main

from pip._internal import main

答案 8 :(得分:0)

似乎get pip脚本错过了一个以上版本的python可以驻留在一台机器上的事实。所以我添加了以下几行:

PY2 = sys.version_info[0] == 2
PY3 = sys.version_info[0] == 3

出于某种原因,它错过了这一点。无论如何这对我有用。谢谢你的帮助。

答案 9 :(得分:0)

执行以下步骤来解决问题-(Ubuntu-Debian)

第1步-转到目录

  

cd usr / bin /

并使用gedit或nano(通过终端)打开pip3文件。

第2步,将CREATE TABLE webhook_contexts(id integer, context_name character varying(100), context_description character varying(100) , users text REFERENCES webhook_userproperty(username) ON UPDATE CASCADE ON DELETE CASCADE); 更改为from pip import main

PS-如果您无权更改使用命令-from pip._internal import main并保存此文件。

希望这会有所帮助!