私の最終的な目標は、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
次のように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
私のOSはLinux Mint 18です
Sudo nano /usr/bin/pip3
変化する
from pip import main
に
from pip._internal import main
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でも機能します)
Sudo chmod -R a+rx /usr/local/lib/python3.6/site-packages
ls -l /usr/local/lib/python3.6/site-packages
の出力で、pipディレクトリが所有者(root)のみによって読み取り可能であるという問題がすぐにわかります。
cd /usr/bin
を実行します
次に、Sudo nano pip
で、pipファイルを編集します
from pip import main
をfrom pip._internal import main
に変更します
これで問題が解決します
問題が解決するまで、次の方法を試してください。
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)
私のOSはMacシエラで、次の行を変更する必要がありました
from pip import main
に
from pip._internal import main
答えは正確にはわかりませんが、このエラーは、スクリプトが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をロードしますか?
問題を解決するには、次の手順を実行します-(Ubuntu-Debian)
ステップ1-ディレクトリに移動
cd usr/bin /
geditまたはnano(via terminal)を使用してpip3ファイルを開きます。
ステップ2-from pip import main
をfrom pip._internal import main
に変更します
追伸-変更する権限がない場合は、Sudo chmod 777 pip3
コマンドを使用してこのファイルを保存してください。
お役に立てれば!!
Get pipスクリプトには、pythonの複数のバージョンがマシン上に存在できるという事実が欠けていたようです。そこで、次の行を追加しました。
PY2 = sys.version_info[0] == 2
PY3 = sys.version_info[0] == 3
何らかの理由でこれが欠落していました。とにかくこれは私のために働いた。助けてくれてありがとう。