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

Moo*_*ani 24 python linux pip amazon-web-services 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
Run Code Online (Sandbox Code Playgroud)

当我做

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'
Run Code Online (Sandbox Code Playgroud)

环境: 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
Run Code Online (Sandbox Code Playgroud)

另一个编辑:

导入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
Run Code Online (Sandbox Code Playgroud)

Mul*_*eri 71

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

nano /Library/Frameworks/Python.framework/Versions/3.6/bin/pip3
Run Code Online (Sandbox Code Playgroud)

并更改导入主线,因此它说:

from pip._internal import main
Run Code Online (Sandbox Code Playgroud)

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

我从这个帖子中找到了这个提示和更多信息:https: //github.com/pypa/pip/issues/5240

  • 在Ubuntu上为我工作,但文件在另一条道路上:`sudo nano/usr/bin/pip3` (11认同)

小智 18

我的操作系统是Linux Mint 18

sudo nano /usr/bin/pip3
Run Code Online (Sandbox Code Playgroud)

更改

from pip import main
Run Code Online (Sandbox Code Playgroud)

from pip._internal import main
Run Code Online (Sandbox Code Playgroud)


Tin*_* LI 17

不要直接调用pip/pip3,这是不同用户在不同位置的快捷方式,升级pip时检查不好(检查'pip'和'sudo which pip').

 $ sudo python -m pip install xxx  #for python2 
 $ sudo python3 -m pip install xxx  #for python3
Run Code Online (Sandbox Code Playgroud)

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


小智 6

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

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


Iya*_*jao 5

做一个 cd /usr/bin

然后sudo nano pip编辑pip文件

更改from pip import mainfrom pip._internal import main

这将解决问题


use*_*723 1

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

我敢打赌,您仍然安装了另一个旧版本的 python,它有自己的 pip 版本。由于某种原因,您的 pythonpath 正在加载该路径,而不是 py3.6 附带的路径。

一些值得研究的可能性:

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

  • pip 脚本顶部的 shebang 行是否类似于#!/usr/bin/env python而不是#!/usr/bin/python3.6应有的样子?

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

  • 是否可以更改你的 PYTHONPATH (我认为它被添加到sys.pathpython 内部的默认值;查找它),以便它加载新的 pip 而不是旧的 pip?