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

Posted

技术标签:

【中文标题】Python3.6 ImportError:无法导入名称\'main\'Linux RHEL6【英文标题】:Python3.6 ImportError: cannot import name 'main' Linux RHEL6Python3.6 ImportError:无法导入名称'main'Linux RHEL6 【发布时间】:2017-09-26 06:28:05 【问题描述】:

我的最终目标是下载并安装 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

【问题讨论】:

"通过 yum 安装 python 对我不起作用" - 它是怎么失败的? 不确定退出,但 yumming 时似乎找不到 python 或 pip 包。我将更新我的问题以包含详细信息 这看起来很相关:packaging.python.org/install_requirements_linux 删除它然后重新安装。 yum remove python-pip 然后yum install python-pip 相信你手动正确安装了 Python 3.6。然后,您应该可以从终端获得 python3pip3 命令。 sys.path 使用 python3import sys 之后包含什么?你应该有类似 /somepath/python3.6/site-packages 的东西。那么ls -l /somepath/python3.6/site-packages | grep pip 打印出来的是什么? 【参考方案1】:

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

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

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

from pip._internal import main

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

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

【讨论】:

在 Ubuntu 上为我工作,但文件位于另一个路径中:sudo nano /usr/bin/pip3【参考方案2】:

按照以下步骤解决问题--(Ubuntu-Debian)

第 1 步 - 转到目录

cd usr/bin/

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

第 2 步 - 将 from pip import main 更改为 from pip._internal import main

P.S - 如果您无权更改使用命令 - sudo chmod 777 pip3 并保存此文件。

希望这会有所帮助!

【讨论】:

【参考方案3】:

做一个cd /usr/bin

然后sudo nano pip来编辑pip文件

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

这将解决问题

【讨论】:

没有这样的文件或目录【参考方案4】:

我的操作系统是 Linux Mint 18

sudo nano /usr/bin/pip3

改变

from pip import main

from pip._internal import main

【讨论】:

【参考方案5】:

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

from pip import main

进入

from pip._internal import main

【讨论】:

【参考方案6】:

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

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

这些命令不走捷径,直接调用pip模块,维护得很好(Windows也可以)

【讨论】:

【参考方案7】:

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

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)

【讨论】:

在 High Sierra 为我工作。【参考方案8】:

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

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

【讨论】:

【参考方案9】:

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

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

由于某种原因,它缺少这个。无论如何,这对我有用。谢谢你们的帮助。

【讨论】:

【参考方案10】:

我不完全知道答案,但是:该错误表明脚本可以找到名为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 的默认值;查找它)以便加载新点而不是旧点?

【讨论】:

Python 2.x 仍然是许多基于 Linux / Unix 的操作系统的默认 Python 版本。小心“选择要使用的默认 python”。

以上是关于Python3.6 ImportError:无法导入名称'main'Linux RHEL6的主要内容,如果未能解决你的问题,请参考以下文章

ImportError: 当使用pyinstaller创建一个.exe时,无法导入名称'pywrap_tensorflow'。

无法在 python3 (Mac) 上导入 pygrib

pygame 错误:“ImportError:没有名为 'pygame' 的模块”

python遇到错误ImportError: cannot import name 'create_prompt_application'

ImportError:没有名为 ghostscript 的模块

模块导入 Python 3.6 上的 ModuleNotFoundError 和 ImportError