以前に pip を使用していた SLES システムに複数の Python RPM がインストールされているリモートサイトの一部のノードに問題があります。リモートチームに2つを混在させないように指示し、現在はこのガイドラインに従いますが、まだ「混合」されているいくつかのシステムがあります。
サイトの一部(すべてではない)システムで「pip list」を実行すると、pipが最新のパッケージを見つけたことがわかります。 PipはRPMを介して更新されましたが、すべてのノードで他のPythonパッケージと同じ順序でインストールされましたが、同じ動作はありませんでした。その結果、最新のパッケージによる非互換性が原因で、一部のスクリプトが正常に動作しなくなりました。
このサイトのノード間には間違いなくわずかな違いがありますが、全体としてはできるだけ同じままです。 Pythonパッケージのyumインストールでpipデータベースを更新する方法を知っている人はいますか?
答え1
Pythonパッケージのyumインストールでpipデータベースを更新する方法を知っている人はいますか?
このため、pipには実際にPython自体とは別のデータベースがありません。パッケージがインストールされると、関連する名前が<package>.egg-info
パッケージ自体の横に表示されます。これはコアPythonpip
ではありませんyum
。したがって、pipに何があるのかを尋ねると、egg-info
メタファイルを見つけてそれを使用して何がインストールされているかを伝えます。例: /usr/lib/python3/dist-packages
Ubuntu で。
yumにPythonパッケージのインストールを要求した場合は、RPMにも同じegg-info
ファイルを添付する必要があります。
Pipの仕事の1つは、インストール時のPython環境の依存関係を確認することです。 yumが依存関係を破ると、これは見つかったとおりに見つかります。これはファイルのメタデータを確認することによって行われますegg-info
。
Yumはまた依存関係を確認しようとします。しかし、大きな問題があります。 Yumは実際にどのPythonライブラリがインストールされているかを知りません。インストールされているRPMだけがわかります。そのため、yumや他のRPMなしでインストールされたPythonパッケージはyumで検索されません。
これが実際に仮想環境を作る目的です。アプリケーション環境をシステム環境に結び付けるのは一般的に良い考えではありません。アプリケーションの要件をオペレーティングシステムに合わせる良い方法はほとんどありません。
どのような状況で、pipはyumのパッケージアップデートを「発見」することができますか?
yumが同じ環境にパッケージをインストールした場合、pipはそのパッケージを検索できる必要があります。 2つの主な例外は次のとおりです。
仮想環境にパッケージをインストールする場合。特に要求しない限り、仮想環境はシステムパッケージを継承しません。環境がそれを継承していても、常に独自のローカルインストールを使用してください。
pipがシステムの代わりにユーザーにパッケージをインストールする場合。繰り返しますが、これらのパッケージはyumによって上書きされず、Pythonは通常ユーザーのためにインストールされたパッケージ(
/home/...
システムにインストールされているパッケージの下)を使用します。
第二は、機械間の差異の原因である可能性が高い。pip install
システム用にインストールしているユーザーにインストールできます。sudo pip install