pip凍結は、pipを介して削除され、Pacmanを介して再インストールされたパッケージを一覧表示します。

pip凍結は、pipを介して削除され、Pacmanを介して再インストールされたパッケージを一覧表示します。

パッケージマネージャを介さずにパッケージをインストールすることは非常に悪い考えだと聞いたので、を通じてインストールしたすべてのpipパッケージを探してみました。パッケージpipは公式リポジトリでも簡単に見つけることができます。すべてのパッケージがこのようなわけではありません(AURをナビゲートしたり直接パッケージ化したりできることを知っていますが、今は公式リポジトリに滞在しようとしています)。したがって、pacman一部のパッケージは現在インストールされたままで、残りは 。pippacman

このタスクを実行するための私(認識的に原始的な)ワークフローは次のとおりです。

  1. pip freeze | less;移行するパッケージの選択(デフォルトではランダム)
  2. pacman -Ss python-packagename(見つからない場合は中止して別のパッケージでもう一度お試しください)
  3. sudo pip uninstall packagename
  4. sudo pacman -S python-packagename
  5. pacmanファイルの競合が報告されたら、すべての依存パッケージに対して手順2〜4を繰り返し、ターゲットパッケージで手順5を再試行してください。

pacmanこれで、正しいファイルを表示する-listを介してパッケージを正常に管理したと思いpacman -Ql python-packagenameます。pacmanpacman

しかし、問題は、pip freezeこれらのパッケージがpip

たとえば、pip freeze | grep pylint両方ともpacman -Qqe | grep pylintパッケージがインストールされていることを示します。sudo pacman -Rs python-pylintまたはを介してパッケージを正常に削除することができますsudo pip uninstall pylint

これにより - パッケージを削除します。合格かpip合格かpacman- パッケージがpip freezeリストから消え、pacman -Qqeもう何も見つかりません。その後、パッケージを再インストールするとpacman -S再表示されますpip freeze。パッケージを再インストールすると、pipそのパッケージがpacman -Qqe

pipパッケージを実行して削除し、sudo pip uninstall packagenameフラグ--user(たとえばpip install --user packagename)を使用して再インストールすると、sudo pip freezeパッケージは表示されませんがpip freeze表示されます。パッケージを再インストールすると、両方のリストpacmanに再表示されます。


この質問が前の質問と重複しているようではありません。このリンクから;この問題では、ユーザーはアンインストールによってパッケージを削除できず、pip freeze問題はいくつかの異なるpipバイナリで追跡されました。

この場合、パッケージを削除するとパッケージも削除され、pip同じpip freeze出力がwhich pip表示されます。また、同じ出力を生成します。sudo which pip/usr/bin/pipsudo pip freezepip freeze

しかし、上記の質問に対する回答に示されているテストは、私が考えるのに奇妙な振る舞いを示しています。 (次のテストはアンインストールと再インストールpylintによって行われました。)pippacman

$ python -c 'import pkg_name' &> /dev/null && echo installed || echo not installed
Using config file /home/[my user name]/.pylintrc
not installed

パッケージが実際にインストールされました。構成ファイル行を印刷するだけでなく、パッケージを正常に使用できます(pylint foo.py)。テストを印刷したくないですかinstalled


トピックに関する実際の質問に答えるには:

  • pip実際に、どのパッケージがおよび経由でのみインストールされ、どのパッケージがおよび経由で「インストール」されているかを確認するにはどうすればよいですか。pippacman
  • pipインストールでパッケージを追跡する広範な問題を解決するにはどうすればよいですかpacman

ベストアンサー1

私はPythonスクリプトを書いています(箇条書きリンク)すべてのPythonパッケージにpacman

インストールする

スクリプトをダウンロードして実行可能にします。

$ wget https://gist.github.com/hoefling/314565368a66c308b4d7d407a3028cb7/raw/7b81553fa0a84b92a90fbaa0746482d0ec18516c/pip-query -O pip-query
$ chmod +x pip-query

使用法

base/archlinux以下は、私がインストールしたDockerコンテナからそれを呼び出す例ですpython-pippython-wheel

$ ./pip-query
Package    Version Owner
---------- ------- -----------------
appdirs    1.4.3   python-appdirs
packaging  17.1    python-packaging
pip        9.0.1   python-pip
pyparsing  2.2.0   python-pyparsing
setuptools 39.2.0  python-setuptools
six        1.11.0  python-six
wheel      0.31.1  python-wheel

出力はの出力と似ていますpip list --format=columnsが、OwnerPythonパッケージを所有するシステムパッケージの名前を印刷する追加の列があります。

直接インストールされたパッケージを使ってテストしましょうpip

$ sudo pip install tqdm
...
$ ./pip-query
Package    Version Owner
---------- ------- -----------------
appdirs    1.4.3   python-appdirs
packaging  17.1    python-packaging
pip        9.0.1   python-pip
pyparsing  2.2.0   python-pyparsing
setuptools 39.2.0  python-setuptools
six        1.11.0  python-six
tqdm       4.23.4
wheel      0.31.1  python-wheel

このOwner列の行に空のセルがあり、これはインストールされていないtqdmことを示します。削除:tqdmpacmantqdmpip

$ sudo pip uninstall -y tqdm

それをインストールしてくださいpacman

$ pacman -S python-tqdm

永久インストール

必要に応じて、適切な実行可能ファイルと呼ばれるように、ファイルをpip-queryPATH好ましくはローカルに配置します。$HOME/.local/bin

$ pip-query

他のパッケージマネージャに適応

必要に応じて、他のパッケージマネージャと連携するようにスクリプトを簡単に調整できます。たとえば、['pacman', '-Qqo', file]に変更すると['qfile', '-q', file]、スクリプトは追加の変更なしでGentooで実行されます*。パッケージマネージャが一般的なパッケージ名の印刷をサポートしていない場合は、out正規表現やその他の方法を使用して文字列から関連情報を抽出します。

バッチ再インストールパッケージpacman

これを修正するpip-queryか、Unix哲学に従い、bashコマンドを作成して再インストールすることができます。ただし、pacman以下の例に示すように、いくつかの推奨事項を処理し、推奨事項なしで状況を実装する必要があります。私の試みは次のとおりです(bashの専門家ではありません)。

$ ./pip-query | tail -n +3 | while read line ; do split=(${line}); \
> if [ "${#split[@]}" -eq "2" ]; then pkgname=${split[0]}; \
> echo -e "Suggestion: pip uninstall -y $pkgname && pacman -S $(pacman -Sspq $pkgname | tr '\n' ' ')"; \
> fi; done
Suggestion: pip uninstall -y tqdm && pacman -S python-tqdm python2-tqdm

これを強化すると、再インストール作業のための自動化されたソリューションが得られます。


*: 家庭的なapp-portage/portage-utils発生。

おすすめ記事