110

開発中に変更される pip 要件ファイルがあります。

要件ファイルに表示されていないパッケージをアンインストールするだけでなく、表示されているパッケージをインストールすることもできpipます? 標準的な方法はありますか?

これにより、pip 要件ファイルをパッケージの標準的なリストにすることができます。これは、「if and only if」アプローチです。

更新: https://github.com/pypa/pip/issues/716で新機能として提案しました

4

10 に答える 10

149

これにより、requirements.txt にないものはすべてアンインストールされます。

pip freeze | grep -v -f requirements.txt - | grep -v '^#' | xargs pip uninstall -y

-eただし、これは でインストールされたパッケージ、つまり git リポジトリなどからインストールされたパッケージでは正しく動作しません。-eこれらをスキップするには、次のフラグで始まるパッケージを除外します。

pip freeze | grep -v -f requirements.txt - | grep -v '^#' | grep -v '^-e ' | xargs pip uninstall -y

次に、明らかに:

pip install -r requirements.txt

2016 年の更新: ただし、実際には上記のアプローチを実際に使用する必要はないでしょう。おそらくあなたが探していることを、はるかに堅牢な方法で達成できるものをチェックしてくださいpip-toolspip-sync

https://github.com/nvie/pip-tools

2016 年 5 月の更新:

も使用できるようpip uninstall -r requirements.txtになりましたが、これは基本的に反対のことを実現します。requirements.txt

2019 年 5 月の更新:

pipenvまたはPoetryを確認してください。パッケージ管理の世界では、この種の質問が少し時代遅れになっていることがたくさんあります。とはいえ、私はまだ pip-tools をとても楽しく使っています。

于 2013-03-29T17:55:35.343 に答える
23

-r requirements.txtに引数を渡すことができるようになりましたpip uninstall

pip uninstall -r requirements.txt -y

少なくともpip8.1.2 では、次のようにpip help uninstall表示されます。

...
Uninstall Options:
  -r, --requirement <file>    Uninstall all the packages listed in the given requirements file.  This option can be
                              used multiple times.
...
于 2018-10-28T13:41:07.457 に答える
22

の機能ではpipありません。本当にそのようなことが必要な場合は、 の出力を と比較するスクリプトを作成できますがpip freezerequirements.txtその価値よりも手間がかかる可能性があります。

を使用virtualenvすると、次のように、クリーンな環境を作成してから (再) インストールする方が簡単で信頼性が高くなりますrequirements.txt

deactivate
rm -rf venv/
virtualenv venv/
source venv/bin/activate
pip install -r requirements.txt
于 2012-11-01T13:20:48.403 に答える
17

簡単な答えはノーです。pipではそれを行うことはできません。

于 2012-11-01T17:36:45.050 に答える
3

Stephen の提案は素晴らしいアイデアですが、残念ながら、ファイルに直接的な要件のみを含めるとうまくいきません。

を含むすべての依存関係がアンインストールされ、それ自体distributeが分解されpipます。

仮想環境のバージョンを追跡しながら、クリーンな要件ファイルを維持する

仮想環境のバージョンを追跡する方法を次に示します。私は、直接的な要件のみを含め、最小限の .xml を維持しようとしてrequirements.txtいます。よくわからない場合は、バージョンの制約についても言及しません。

さらに、ファイル内の virtualenv の実際のステータスを保持し、バージョン追跡 (git など) に含めvenv.pipます。

サンプル ワークフローは次のとおりです。


バージョン追跡を使用して、virtualenv ワークスペースをセットアップします。

mkdir /tmp/pip_uninstalling
cd /tmp/pip_uninstalling
virtualenv venv
. venv/bin/activate

バージョン追跡システムを初期化します。

git init
echo venv > .gitignore
pip freeze > venv.pip
git add .gitignore venv.pip
git commit -m "Python project with venv"

依存関係のあるパッケージをインストールし、要件ファイルに含めます。

echo flask > requirements.txt
pip install -r requirements.txt
pip freeze > venv.pip

アプリのビルドを開始し、コミットして新しいブランチを開始します。

vim myapp.py
git commit -am "Simple flask application"
git checkout -b "experiments"

追加のパッケージをインストールします。

echo flask-script >> requirements.txt
pip install -r requirements.txt
pip freeze > venv.pip

...それで遊んでから、以前のバージョンに戻ってください

vim manage.py
git commit -am "Playing with flask-script"
git checkout master

ここで無関係なパッケージをアンインストールします:

pip freeze | grep -v -f venv.pip | xargs pip uninstall -y

このプロセスは git フックを使用して自動化できると思いますが、本題から外れないようにしましょう。

もちろん、パッケージ キャッシング システムやpip2piなどのローカル リポジトリを使用することは理にかなっています。

于 2015-02-24T13:23:20.640 に答える
2

ここで @stephen-j-fuhry に便乗するのは、私が使用する同等の PowerShell です。

pip freeze | ? { $_ -notmatch ((gc req.txt) -join "|") }
于 2014-03-13T12:22:30.997 に答える
0

これは質問に直接答えるものではありませんが、requirements.txt今よりも優れた代替手段はPipfile. これは Ruby と同様に機能しGemfileます。現在、pipenvツールを使用する必要がありますが、これが最終的に に組み込まれることを願っていますpip。これにより、pipenv clean必要なことを行うコマンドが提供されます。

requirements.txt(既存のwithをインポートできることに注意してくださいpipenv install -r requirements.txt。この後、 が必要Pipfileで、requirements.txtは削除できます。)

于 2019-03-25T19:58:46.103 に答える
-4

以下を使用して可能になりました:

pip uninstall -r requirements.txt
于 2016-07-19T12:58:04.067 に答える