web-dev-qa-db-ja.com

Python3.6 ImportError:名前 'main' Linux 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'

環境: ssh経由でアクセスされるRHEL 6.6

何が起こっている? 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
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/524

71
Mulperi

私のOSはLinux Mint 18です

Sudo nano /usr/bin/pip3

変化する

from pip import main

from pip._internal import main
18
Aftabul Islam

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でも機能します)

17
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で、pipファイルを編集します

from pip import mainfrom 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

私のOSはMacシエラで、次の行を変更する必要がありました

from pip import main

from pip._internal import main

1
Kapidis

答えは正確にはわかりませんが、このエラーは、スクリプトがsomepipというパッケージを見つけることができるが、正しいパッケージを見つけることができないことを示しています。おそらく、mainメソッドを作成する前の古いバージョンのpip(pythonシェルからpip.__version__を確認できます)。

独自のバージョンのpipがインストールされている別の古いバージョンのpythonがまだインストールされていることは間違いありません。何らかの理由で、あなたのpythonpathはpy3.6で行くものの代わりにそれをロードしています。

検討する可能性:

  • Redhatについては何も知りませんが、使用する「デフォルトのpython」を選択するredhat固有の方法はありますか?

  • Pipスクリプトの先頭のShebang行は、#!/usr/bin/env pythonではなく#!/usr/bin/python3.6のようなものですか?

  • ダウンロードしたpythonが使用されるようにシェルのPATHを変更することは可能ですか?

  • PYTHONPATHを変更して(Python内のsys.pathのデフォルト値に追加されると思います。調べてください)、古いpipではなく新しいpipをロードしますか?

1
user3113723

問題を解決するには、次の手順を実行します-(Ubuntu-Debian)

ステップ1-ディレクトリに移動

cd usr/bin /

geditまたはnano(via terminal)を使用してpip3ファイルを開きます。

ステップ2-from pip import mainfrom pip._internal import mainに変更します

追伸-変更する権限がない場合は、Sudo chmod 777 pip3コマンドを使用してこのファイルを保存してください。

お役に立てれば!!

0
rahul ranjan

Get pipスクリプトには、pythonの複数のバージョンがマシン上に存在できるという事実が欠けていたようです。そこで、次の行を追加しました。

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

何らかの理由でこれが欠落していました。とにかくこれは私のために働いた。助けてくれてありがとう。

0
Moonie Asemani