
パッケージマネージャを介さずにパッケージをインストールすることは非常に悪い考えだと聞いたので、を通じてインストールしたすべてのpip
パッケージを探してみました。パッケージpip
は公式リポジトリでも簡単に見つけることができます。すべてのパッケージがこのようなわけではありません(AURをナビゲートしたり直接パッケージ化したりできることを知っていますが、今は公式リポジトリに滞在しようとしています)。したがって、pacman
一部のパッケージは現在インストールされたままで、残りは 。pip
pacman
このタスクを実行するための私(認識的に原始的な)ワークフローは次のとおりです。
pip freeze | less
;移行するパッケージの選択(デフォルトではランダム)pacman -Ss python-packagename
(見つからない場合は中止して別のパッケージでもう一度お試しください)sudo pip uninstall packagename
sudo pacman -S python-packagename
pacman
ファイルの競合が報告されたら、すべての依存パッケージに対して手順2〜4を繰り返し、ターゲットパッケージで手順5を再試行してください。
pacman
これで、正しいファイルを表示する-listを介してパッケージを正常に管理したと思いpacman -Ql python-packagename
ます。pacman
pacman
しかし、問題は、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/pip
sudo pip freeze
pip freeze
しかし、上記の質問に対する回答に示されているテストは、私が考えるのに奇妙な振る舞いを示しています。 (次のテストはアンインストールと再インストールpylint
によって行われました。)pip
pacman
$ 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
実際に、どのパッケージがおよび経由でのみインストールされ、どのパッケージがおよび経由で「インストール」されているかを確認するにはどうすればよいですか。pip
pacman
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-pip
。python-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
が、Owner
Pythonパッケージを所有するシステムパッケージの名前を印刷する追加の列があります。
直接インストールされたパッケージを使ってテストしましょう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
ことを示します。削除:tqdm
pacman
tqdm
pip
$ sudo pip uninstall -y tqdm
それをインストールしてくださいpacman
:
$ pacman -S python-tqdm
永久インストール
必要に応じて、適切な実行可能ファイルと呼ばれるように、ファイルをpip-query
、PATH
好ましくはローカルに配置します。$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
発生。