「pip」を含むパッケージをアンインストールすると、依存パッケージも削除されますか?


153

を使用pipしてパッケージをインストールすると、必要なすべてのパッケージも一緒にインストールされます(依存関係)。そのパッケージをアンインストールすると、依存パッケージも削除されますか?


1
なぜそれを試して見られないのですか?私はあなたの質問に答えるためにそれを正確に行いますが、何らかの理由で、pipは現在ここでパッケージインデックスを取得できません。
Thomas Vander Stichele、2011年

1
私はpipニュースグループで、少なくとも今のところ、pipの人々はこの機能を望まないことを発見しました。なんて残念なこと、惜しいこと!
ミシェルサミア2013

4
@ThomasVanderStichele。なぜなら、その答えは将来のGoogle社員にはオンラインで利用できないためです。:)
Mark

1
@それがそうだとマークしてください、あなたはここにあなた自身の質問への答えを書き留めてください。
Thomas Vander Stichele 2017年

5
@ThomasVanderStichele:私はOPではないが、これがSOの非常に合法的なQ&Aである理由は次のとおりpipです。管理者権限(ただし、パッケージはそうではありませんでした)。そのため、パッケージを壊したりアンインストールしたりすることは非常に悲痛であり、正しく実行するためのワンショットがありました。c)インターネット接続が適切でない可能性があります。セキュリティ上の理由から、企業のマシンはファイアウォールで保護されていることが多いため、直接接続を想定することはできません。また、必要なすべてのものとそのバージョンを事前に把握し、ダウンロードする必要があります。
smci

回答:


80

いいえ、依存パッケージはアンインストールされません。指定されたパッケージのみを削除します。

$ pip install specloud
$ pip freeze # all the packages here are dependencies of specloud package

figleaf == 0.6.1
nose == 1.1.2
pinocchio == 0.3
specloud == 0.4.5

$ pip uninstall specloud
$ pip freeze

figleaf == 0.6.1
鼻== 1.1.2
ピノキオ== 0.3

ご覧のとおり、これらのパッケージは依存関係にspecloudあり、それらはまだそこにありますが、specloudパッケージ自体はありません。

以下で説明するように、pip-autoremoveユーティリティをインストールして使用すると、パッケージと未使用の依存関係を削除できます。


2
パッケージの排他依存パッケージについてはどうspecloudですか?
Fusion

@Fusionこれらのパッケージは、specloudの依存関係です。
ベルナルドバレート

250

pip-autoremoveユーティリティをインストールして使用すると、パッケージと未使用の依存関係を削除できます。

# install pip-autoremove
pip install pip-autoremove
# remove "somepackage" plus its dependencies:
pip-autoremove somepackage -y

9
残念ながら、まだ本当のPython3サポートはありません(github.com/invl/pip-autoremove/issues/18を参照)。
asmaier '10 / 10/19

10
2019
スナック

@ loved.by.Jesus-私はpython 3.8.3を使用していますが、テストした結果、コマンドはpip-autoremove(アンダースコアではなくダッシュで)実行されたままです。 pip_autoremoveくれcommand not foundます。
bwv549

@ bwv549私はそれを経由して実行したことを説明するpython<version>必要があります(バージョンを指定する必要がある場合)。このように、名前を適合させる必要がありますpip_autoremove(ダッシュはパッケージ名として許可されていません)。たとえば、python3.8 pip_autoremove機能しますがpython3.8 pip-autoremove機能しません。それ以外の場合は、ご指摘のpip-autoremoveとおり、単純な端末コマンドとして、完全に機能します:) —システムのデフォルトのpythonバージョンのみが使用されます。メッセージありがとうございます。
loved.by.Jesus

9

このbash行を使用して、パッケージの依存関係を正常に削除しました。

for dep in $(pip show somepackage | grep Requires | sed 's/Requires: //g; s/,//g') ; do pip uninstall -y $dep ; done

これはpip 1.5.4で機能しました


40
他の回答で述べたように、技術的にはこのソリューションすべての依存関係を正常に削除しますが、システムパッケージからインストールされたものを含め、ターゲット固有ではない依存関係アンインストールします。たとえば、私のシステムでは、ターゲットパッケージにpipと共通の依存関係があるため、このスクリプトは最終的に失敗しました。そのため、pipはスクリプトが完了する前に独自の依存関係をアンインストールして失敗しました。
sinisterstuf

19
この削除しに用心のみ依存関係ダウン次のレベル、しかしないそれらの依存関係の依存関係を。
tamakisquare 2017年

0

一部の人が実行するのは少し難しいかもしれませんが、私は解決策を見つけました。

最初のステップ(python3およびlinuxの場合):
pip3 install pip-autoremove
2番目のステップ:
cd /home/usernamegoeshere/.local/bin/
3番目のステップ:
gedit /home/usernamegoeshere/.local/lib/python3.8/site-packages/ pip_autoremove.py
とすべてのpipをpip3 に変更4番目のステップ:./pip-autoremove packagenamegoeshere

少なくとも、これは私にとってうまくいったものでした...


-1

https://github.com/cls1991/pefを試してみてください。すべての依存関係を持つパッケージを削除します。


残念ながら、pefは仮想環境でのみ機能するようです。

これは安全性を考慮したものであり、コードをハックして、保護コードをオフにするだけです。
cls1991、18年

1
それらの依存関係が「ぶら下がっている」、つまり他のディストリビューションでは不要であることを確認していますか?
WIM

ええ、それは参照カウントに基づいています。
cls1991

コードをフォークして変更した人たち。以下のリンクを見つけてください。 github.com/nalangekrushna/pef
Krissh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.