Python3.6 ImportError: cannot import name 'main' Linux RHEL6

馋奶兔 提交于 2019-12-17 22:34:22

问题


My ultimate goal is to download and install awscli http://docs.aws.amazon.com/cli/latest/userguide/awscli-install-linux.html

Seems python and pip are required in order to accomplish my goal.

Installing python via yum isn't working for me, so I downloaded and installed python3 manually as follows:

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

When I do

pip3.6 --version

I get this:

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

Environment: RHEL 6.6 Accessed via ssh

What is going on? How to install pip and python3.6 correctly on my linux box?

Edit:

When trying to install via yum it fails so I am trying to avoid using 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

Another Edit:

After importing sys and then called sys.path this is what I get:

[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

回答1:


You need to edit the pip3 file like so (your path could be different):

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

And change the import main line so it says:

from pip._internal import main

After this change, my pip3 started to work and I am on macOS. If you are using Linux, your path could be something like /usr/bin/pip3

I found this tip and more information from this thread: https://github.com/pypa/pip/issues/5240




回答2:


My OS is Linux Mint 18

sudo nano /usr/bin/pip3

Change

from pip import main

To

from pip._internal import main



回答3:


Don't invoke pip/pip3 directly, which are shortcuts at different locations for different user and they are not well maintained when you upgrade pip (check 'which pip' and 'sudo which pip').

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

These commands do not take shortcuts and directly invoke pip module, which is maintained very well (also works on Windows)




回答4:


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

You can see the problem right there in your ls -l /usr/local/lib/python3.6/site-packages output that your pip directory is only readable by the owner, which is root.




回答5:


Do a cd /usr/bin

Then sudo nano pip so as to edit the pip file

Change from pip import main to from pip._internal import main

This will resolve the issue




回答6:


try the following as a way around the issue until it got solved

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)



回答7:


I don't exactly know the answer, but: that error indicates that the script can find some package called pip, but not the right one. Probably, an old version of pip, from back before they created a main method (you can check pip.__version__ from the python shell).

I'm willing to bet that you still have another, older version of python installed which has its own version of pip. For some reason your pythonpath is loading that one instead of the one that goes with py3.6.

Some possibilities to look into:

  • I don't know anything about redhat, but is there some redhat-specific way of choosing the "default python" to be used?

  • Is the shebang line at the top of the pip script something like #!/usr/bin/env python instead of #!/usr/bin/python3.6 like it should be?

  • Is it possible to modify your shell's PATH so that the downloaded python is used?

  • Is it possible to change your PYTHONPATH (i think it gets added to the default value of sys.path inside python; look it up) so that it loads the new pip instead of the old pip?




回答8:


My OS was Mac sierra and I had to change the following line

from pip import main

into

from pip._internal import main




回答9:


Seems the get pip script was missing the fact that more than 1 version of python could reside on a machine. So I added the following lines:

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

For some reason it was missing this. Anyway this worked for me. Thanks for your help guys.




回答10:


Do the following steps to solve the problem --(Ubuntu-Debian)

step 1 - Go to directory

cd usr/bin/

and open pip3 file using gedit or nano(via terminal) .

Step 2- change from pip import main into from pip._internal import main

P.S - If you donot have permission to change use command - sudo chmod 777 pip3 and save this file.

Hope this helps!!



来源:https://stackoverflow.com/questions/43675074/python3-6-importerror-cannot-import-name-main-linux-rhel6

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!