0

Fabricを使用して、プロジェクトの展開ルーチンを自動化しています。

それらの 1 つは、virtualenv のレプリケーションに関するものです。

新しいパッケージのインストールの自動化は、非常に簡単です

local $ pip freeze > requirements.txt
remote $ pip install -r requirements.txt

パッケージがもう必要ない場合は、簡単に

local $ pip uninstall unused_package

しかしpip install、要件に存在しないパッケージはもう削除されないため、要件に
存在しない virtualenv からのパッケージの削除を自動化するにはどうすればよいですか?

次のようなコマンドが欲しいです:

remote $ pip flush -r requirements.txt
4

3 に答える 3

1

セットとの差分だけではないのはなぜですか? getただし、リモートボックスで操作している場合は、操作を使用する必要がある場合があります

リモートで

from fabric.api import get, run

run("pip freeze > existing_pkgs.txt")
get("/path/to/existing_pkgs.txt")

だから今existing_pkgsあなたのローカルマシンにあります。新しい要件ファイルがあるとします...

with open("requirements.txt", "r") as req_file:
    req_pkgs = set(req_file.readlines())

with open("existing_pkgs.txt", "r") as existing_pkgs:
    existing = set(existing_pkgs.readlines())

セットの違いを与える操作を行います

uninstall_these = existing.difference_update(req_pkgs)

次に、リモートホストからパッケージをアンインストールします

for pkg in uninstall_these:
    run("pip uninstall {}".format(pkg))
于 2013-09-29T07:44:11.833 に答える
0

インストールとアンインストールのジョブを分けておくことで終わりました。

インストール:

pip install -r requirements.txt

アンインストール:

pip freeze | grep -v -f requirements.txt - | xargs pip uninstall -y
于 2014-05-15T14:56:11.303 に答える