it-swarm.com.ru

Python3.6 ImportError: невозможно импортировать имя 'main' Linux RHEL6

Моя конечная цель - загрузить и установить awscli http://docs.aws.Amazon.com/cli/latest/userguide/awscli-install-linux.html

Кажется, что Python и PIP необходимы для достижения моей цели.

Установка python через yum не работает для меня, поэтому я скачал и установил 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

Что здесь происходит? Как правильно установить pip и python3.6 на мою Linux-коробку? 

Правка:

При попытке установить через yum происходит сбой, поэтому я стараюсь не использовать yum:

[[email protected] 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 я получаю следующее:

[[email protected] 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()
[[email protected] 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
24
Moonie Asemani

Вам нужно отредактировать файл 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

68
Mulperi

Моя ОС Linux Mint 18

Sudo nano /usr/bin/pip3

+ Правка 

from pip import main

К

from pip._internal import main
17
Aftabul Islam

Не вызывайте pip/pip3 напрямую, которые являются ярлыками в разных местах для разных пользователей, и они не очень хорошо поддерживаются при обновлении пипа (отметьте «который пип» и «судо, который пип»).

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

Эти команды не используют ярлыки и напрямую вызывают модуль pip, который поддерживается очень хорошо (также работает в Windows)

16
TingQian LI

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

Вы можете увидеть проблему прямо в выводе ls -l /usr/local/lib/python3.6/site-packages, что ваш каталог pip доступен для чтения только владельцу, который является root.

6
Arthur

Сделать cd /usr/bin

Затем Sudo nano pip, чтобы отредактировать файл пипса

Измените from pip import main на from pip._internal import main

Это решит проблему

5
Iyanuoluwa Ajao

попробуйте следующее как способ обойти проблему, пока она не будет решена

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)
3
Cobry

Моя ОС была Mac Sierra, и мне пришлось изменить следующую строку

from pip import main

в

from pip._internal import main

1
Kapidis

Я точно не знаю ответа, но: эта ошибка указывает, что скрипт может найти некоторый пакет с именем pip, но не тот, который нужен. Возможно, это старая версия pip, созданная еще до того, как они создали метод main (вы можете проверить pip.__version__ из оболочки python).

Готов поспорить, что у вас все еще установлена ​​другая, более старая версия python, которая имеет собственную версию pip. По какой-то причине ваш pythonpath загружает тот, который идет с py3.6.

Некоторые возможности для изучения:

  • Я ничего не знаю о redhat, но есть ли какой-то специфический для redhat способ выбрать «питон по умолчанию», который будет использоваться?

  • Является ли строка Шебанга в верхней части сценария pip чем-то вроде #!/usr/bin/env python вместо #!/usr/bin/python3.6, как должно быть?

  • Можно ли изменить PATH вашей оболочки так, чтобы использовался загруженный питон?

  • Можно ли изменить свой PYTHONPATH (я думаю, что он добавляется к значению по умолчанию sys.path внутри python; ищите его), чтобы он загружал новый пип вместо старого пипса?

1
user3113723

Для решения проблемы выполните следующие действия - (Ubuntu-Debian)

шаг 1 - Перейти в каталог

cd usr/bin /

и откройте файл pip3, используя gedit или nano (через терминал).

Шаг 2 - измените from pip import main на from pip._internal import main

P.S. Если у вас нет прав на изменение, используйте команду - Sudo chmod 777 pip3 и сохраните этот файл.

Надеюсь это поможет!!

0
rahul ranjan

Похоже, что в скрипте get pip отсутствует тот факт, что на машине может находиться более 1 версии python. Поэтому я добавил следующие строки:

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

По какой-то причине этого не хватало. Во всяком случае, это сработало для меня. Спасибо за помощь ребята. 

0
Moonie Asemani