Pythonpip
と多くのPythonモジュールはCentOS Linuxリポジトリを介して提供されます。 CentOS 7.x Linuxでは、pip
標準のDeployment Package Manager()を使用してインストールおよびインストールできます。pymongo
yum install python-pip python-pymongo
ただし、リポジトリに提供されているバージョンはすでにpymongo
古すぎます。のバージョンpip
も通常遅れているので、すぐに実行することをお勧めしますpip install --upgrade pip
。
ここで何をすべきかについて合意がありましたか?アップデートを実行するとpip
RPMのファイルが上書きされるため、パッケージマネージャから苦情を受け取ることができます。
pip
RPMからモジュールをインストールしない方が良いですか?たぶんRPMからPythonをインストールしてから、すべてのモジュールをインストールするだけですpip
(PythonモジュールがRPMから出ておらず、RPMで完全に管理されないようにpip
)。
答え1
この質問を見てください。別のディレクトリに pip をインストールする方法について説明します。これにより、rpmのインストールを維持し、最新バージョンを使用できます。 rpmバージョンを使用する予定がない場合は、おそらく削除します。
答え2
システムのPythonを乱すことなく直接Pythonを使用するには、ContinuumのAnacondaという製品を確認してください。http://Continuum.io/downloads Pythonなどのインストールはホームディレクトリにインストールされ、パスを変更することでシステムにPythonをインストールせずにシステムを壊す可能性があります。また、これらのオプションを使用して仮想環境とConda環境を作成することもできます。
答え3
RPMでpipとモジュールをインストールしない方が良いですか?おそらくRPMからPythonをインストールしてから、pipからすべてのモジュールをインストールするだけです(PythonモジュールがRPMから出ておらず、pipで完全に管理されないように)。
オペレーティングシステムのパッケージマネージャからpipや他のPythonモジュールをインストールできます。多くのシステムコンポーネントがPythonに依存しているため、選択肢がなくなる可能性があり、オペレーティングシステムの最小インストールでもデフォルトでPython + Pythonモジュールがインストールされます。
したがって、pipまたはPythonモジュールの「システム全体」バージョンをアップグレードする必要がありますが、パッケージマネージャが管理するファイルを妨げたくない場合は、次のことを行う必要があります。
次のガイドラインは、利用可能なPythonバージョンが2.7.xの場合、RHEL派生オペレーティングシステムに適用されます。インストールされているPythonのバージョンと一致するようにPYTHONPATHを調整する必要があります。
python-pipのパッケージマネージャのバージョンがインストールされていることを確認してください。たとえば
yum -y install python-pip
。PYTHONPATH 環境変数を設定する profile.d スクリプトを作成します。
# Ensure PYTHONPATH is configured to use /usr/local/lib*/python2.7/site-packages read -r -d '' pythonpath_profile_script <<'EOF' pythonpathmunge () { case ":${PYTHONPATH}:" in *:"$1":*) ;; *) if [ "$2" = "after" ] ; then PYTHONPATH=$PYTHONPATH:$1 else PYTHONPATH=$1:$PYTHONPATH fi esac } pythonpathmunge /usr/local/lib/python2.7/site-packages pythonpathmunge /usr/local/lib64/python2.7/site-packages export PYTHONPATH EOF echo "Creating the /etc/profile.d/pythonpath.sh profile script:" echo "${pythonpath_profile_script}" > /etc/profile.d/pythonpath.sh chown root.root /etc/profile.d/pythonpath.sh chmod -v 0644 /etc/profile.d/pythonpath.sh source /etc/profile.d/pythonpath.sh hash -r
その後、次のようにして、最新バージョンのpipまたは他のPythonモジュールをインストールすることを選択できます。
pip install --upgrade <<PYTHON MODULE NAME>> --ignore-installed --install-option="--prefix=/usr/local" --log /var/log/<<PYTHON MODULE NAME>>-install-$(date "+%Y%m%d%H%M%S").log
例えば
pip install --upgrade pip --ignore-installed --install-option="--prefix=/usr/local" --log /var/log/pip-install-$(date "+%Y%m%d%H%M%S").log hash -r # Notice the use of `hash -r` to refresh bash's hash table of recently # executable programs. Without doing this you may find that the 'pip' # command being used is not the version you just installed.
/usr/local
これにより、システムパッケージマネージャが管理するファイルを妨げない場所に要求されたPythonモジュールがインストールされます。この--ignore-installed
オプションは、pipがモジュールの既存のバージョンに触れないようにします。また、PYTHONPATH 環境変数を使用するため、これらの/usr/local/lib*/python2.7/site-packages
パスはシステムにインストールされたパッケージの前に使用されます。つまり
[root@localhost ~]# python
Python 2.7.5 (default, Sep 15 2016, 22:37:39)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print '\n'.join(sys.path)
/usr/local/lib64/python2.7/site-packages <---
/usr/local/lib/python2.7/site-packages <---
/root
/usr/lib64/python27.zip
/usr/lib64/python2.7
/usr/lib64/python2.7/plat-linux2
/usr/lib64/python2.7/lib-tk
/usr/lib64/python2.7/lib-old
/usr/lib64/python2.7/lib-dynload
/usr/lib64/python2.7/site-packages
/usr/lib/python2.7/site-packages
>>>
最後に、少なくともCentOS / RHELでは、この/usr/local/bin
パスはPATH環境変数の他のシステムバイナリパスの前にあるため、/ usr / local / binにインストールされている最新のバイナリがシステムにインストールされているバイナリよりも優先されます。つまり
[root@localhost ~]$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
答え4
ここで何をすべきかについて合意されたのでしょうか。
はい、システム管理のPythonインストールを手動で変更しないでください(pipの実行) - 参照「sudo pip」を実行するリスクは何ですか?このトピックに関する詳細な議論については、pip Issue 1668を読んでください。デフォルトは --user です。そしてこれに関連するその他の問題。
最も一般的な解決策は次のとおりです。
- ユーザーのホームディレクトリ(ユーザープラン)
- ソースからPythonをコンパイルし、システムインスタンスの代わりにこのインスタンスを使用します。
--target
理論的に別の考えられる解決策は、pipオプションを使用してPYTHONPATH
環境変数を設定することです。しかし、--target
さまざまなオプションがあります(現在12個)。質問。