virtualenvの1つを修正しようとしています-インストールされているすべてのライブラリを、本番環境に一致するライブラリにリセットしたいと思います。
これをpipですばやく簡単に行う方法はありますか?
virtualenvの1つを修正しようとしています-インストールされているすべてのライブラリを、本番環境に一致するライブラリにリセットしたいと思います。
これをpipですばやく簡単に行う方法はありますか?
回答:
私はこのスニペットを代替ソリューションとして見つけました。これは、virtualenvを再作成するよりも、ライブラリを適切に削除します。
pip freeze | xargs pip uninstall -y
VCS経由でインストールされたパッケージがある場合、それらの行を除外し、手動でパッケージを削除する必要があります(以下のコメントから昇格):
pip freeze | grep -v "^-e" | xargs pip uninstall -y
postactivate
です。たとえば、残るものに変更を加えた可能性があります。
setuptools
パッケージが削除されていることに気付きました。私はここの指示に従って問題を解決:stackoverflow.com/questions/7446187/...
pip freeze --exclude-editable | xargs pip uninstall -y
して、grepパターンを使用せずにVCSパッケージを無視することもできます
これは、すべてのMac、Windows、およびLinuxシステムで機能します。requirements.txtファイル内のすべてのpipパッケージのリストを取得するには(注:これは、requirements.txtが存在する場合は上書きされ、それ以外の場合は新しいものを作成します。また、古いrequirements.txtを置き換えたくない場合は、別のファイル名を指定します次のすべてのコマンドを配置しますrequirements.txt)。
pip freeze > requirements.txt
一つずつ削除していきます
pip uninstall -r requirements.txt
一度にすべて削除したい場合
pip uninstall -r requirements.txt -y
requirements.txt
ファイルを含む既存のプロジェクトで作業していて、環境が分岐している場合requirements.txt
は、上記の例をに置き換えてくださいtoberemoved.txt
。次に、上記の手順requirements.txt
を完了したら、を使用して、クリーンな環境を更新できます。
そして、ファイルを作成せずに単一のコマンドの場合(@joebが示唆したとおり)。
pip uninstall -y -r <(pip freeze)
pip uninstall -r requirements.txt -y
pip uninstall -y -r <(pip freeze)
一度にすべてを行うために使用することができます。
これは最新のもので動作します。それはそれを行うための最短かつ宣言的な方法だと思います。
virtualenv --clear MYENV
しかし、通常は不変ルールなのでvirtualenvを削除して再作成するだけです!
wipeenv
ですか?virtualenvwrapper.readthedocs.org/en/latest/...
wipeenv
はようですが、環境内でエラーがスローされ、pip install -e
開発ビルドのコンテキストで使用されても何も削除されvirtualenv --clear MYENV
ませんが、使用しようとしてもエラーはスローされず、以前に環境にインストールした可能性のあるパッケージ。少なくとも、これはOSXの場合です。詳細については、bitbucket.org / dhellmann / virtualenvwrapper / issues / 211 /…を参照してください。
wipeenv
virtualenvwrapperが提供するエイリアスなので、誰もが持っているわけではありません。
これはスレッドで最もエレガントなソリューションの1つであるため、コメントセクションからこの回答を引き上げたいと思いました。この回答の全額は@joebに送られます。
pip uninstall -y -r <(pip freeze)
これは、上記の回答の多くが処理できないvirtualenvのコンテキストの外でユーザーパッケージフォルダーをクリアするユースケースで私にとってはうまくいきました。
編集:Makefileでこのコマンドを機能させる方法を知っている人はいますか?
便宜上、これをbashプロファイルに追加します。
alias pipuninstallall="pip uninstall -y -r <(pip freeze)"
次に実行します:
pipuninstallall
pipenvを使用している場合は、次のように実行できます。
pipenv uninstall --all
pip freeze
、パッケージがインストールされていない場合は何も出力されず、pip uninstall
不満が出ます)。
<(...)
はバシズムです。したがって、bash -c "..."を使用するか、またはapip freeze | pip uninstall -r /dev/stdin
ERROR: Cannot uninstall 'bitarray'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
他に使用する、pip list
または他にpip freeze
含める必要--local
があるその他の回答は、共通の名前空間にあるパッケージもアンインストールします。
だからここに私が定期的に使用するスニペットがあります
pip freeze --local | xargs pip uninstall -y
参照: pip freeze --help
ERROR: Cannot uninstall 'bitarray'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
。その後、これ以上モジュールをアンインストールできませんでした。
pip freeze
)pip freeze | xargs pip uninstall -y
pip list
)pip list | awk '{print $1}' | xargs pip uninstall -y
virtualenv
)virtualenv --clear MYENV
pip list
)は、pipが誤って自分自身をアンインストールするまで適切に機能します-_-
私は次のようにしてそれを管理しました:
現在インストールされているパッケージリストを使用して、reqs.txtという要件ファイルを作成します。
pip freeze > reqs.txt
次に、reqs.txtからすべてのパッケージをアンインストールします
pip uninstall \
-y # remove the package with prompting for confirmation
-r reqs.txt
私はこの方法が好きです。間違いを犯した場合に備えて、pip要件ファイルが常に用意されているからです。繰り返しも可能です。
最も速い方法は、virtualenvを完全に作り直すことです。私はあなたが生産に一致するrequirements.txtファイルを持っていると仮定しています、そうでない場合:
# On production:
pip freeze > reqs.txt
# On your machine:
rm $VIRTUALENV_DIRECTORY
mkdir $VIRTUALENV_DIRECTORY
pip install -r reqs.txt
Windowsでは、path
正しく構成されていれば、以下を使用できます。
pip freeze > unins && pip uninstall -y -r unins && del unins
Unixライクなシステムの場合も同様です。
pip freeze > unins && pip uninstall -y -r unins && rm unins
「ファイルが見つかりません」などの問題が発生する可能性があるため、これは完全に確実ではないという警告だけですが、それでも一部のケースでは機能する場合があります
編集:明確にunins
するために:このコマンドの実行時にデータが書き込まれる任意のファイルです:pip freeze > unins
次に作成されたファイルを使用して、暗黙の同意/事前承認により前述のパッケージをアンインストールします。 pip uninstall -y -r unins
ファイルは完了すると最終的に削除されます。
(@blueberryfieldsの回答にコメントするのに十分な評判がないため、これを回答として追加します)
@blueberryfieldsの回答は適切に機能しますが、アンインストールするパッケージがない場合は失敗します(この「すべてのアンインストール」がスクリプトまたはメイクファイルの一部である場合は問題になる可能性があります)。これは、xargs -r
GNUバージョンのを使用すると解決できますxargs
。
pip freeze --exclude-editable | xargs -r pip uninstall -y
からman xargs
:
-r、-no-run-if-empty
標準入力に非ブランクが含まれていない場合は、コマンドを実行しないでください。通常、コマンドは入力がない場合でも1回実行されます。このオプションはGNU拡張です。
のみを使用したクロスプラットフォームサポートpip
:
#!/usr/bin/env python
from sys import stderr
from pip.commands.uninstall import UninstallCommand
from pip import get_installed_distributions
pip_uninstall = UninstallCommand()
options, args = pip_uninstall.parse_args([
package.project_name
for package in
get_installed_distributions()
if not package.location.endswith('dist-packages')
])
options.yes = True # Don't confirm before uninstall
# set `options.require_venv` to True for virtualenv restriction
try:
print pip_uninstall.run(options, args)
except OSError as e:
if e.errno != 13:
raise e
print >> stderr, "You lack permissions to uninstall this package.
Perhaps run with sudo? Exiting."
exit(13)
# Plenty of other exceptions can be thrown, e.g.: `InstallationError`
# handle them if you want to.
私の場合、pip
macOSにインストールされたHomebrewを使用して、誤って多数のパッケージをグローバルにインストールしました。デフォルトのパッケージに戻す最も簡単な方法は簡単です:
$ brew reinstall python
または、使用していた場合pip3
:
$ brew reinstall python3
ではコマンドシェルのWindowsのコマンドは
pip freeze | xargs pip uninstall -y
動作しません。Windowsを使用している方のために、別の方法を考えました。
pip freeze
のコマンドを.TXTファイル。pip uninstall -r *textfile.txt*
--userオプションを使用して、ユーザーサイトにインストールされているすべてのパッケージをアンインストールします。
pip3フリーズ--user | xargs pip3 uninstall -y
Pipは、どのパッケージがインストールされたか、システムのパッケージマネージャーがどのパッケージをインストールしたかを知る方法がありません。このためには、このようなことをする必要があります
rpmベースのディストリビューションの場合(python2.7を、pipをインストールしたpythonバージョンに置き換えます):
find /usr/lib/python2.7/ |while read f; do
if ! rpm -qf "$f" &> /dev/null; then
echo "$f"
fi
done |xargs rm -fr
debベースのディストリビューションの場合:
find /usr/lib/python2.7/ |while read f; do
if ! dpkg-query -S "$f" &> /dev/null; then
echo "$f"
fi
done |xargs rm -fr
次に、残った空のディレクトリをクリーンアップします。
find /usr/lib/python2.7 -type d -empty |xargs rm -fr
ディストリビューションからすべて(ほとんど?)のpythonパッケージが削除され、システムが壊れたままになる可能性があるため、私は非常に誤解を招く回答を見つけました。
dpkg-query -S '/usr/lib/python2.7/*'
名前を抽出し、dpkg-query -L
各名前を関連付けられたファイルをダンプするのはなぜですか?すでにマニフェストが用意されています。私の主な反対点は、pip以外の場所にインストールされたパッケージを対象にするのではなく、予想されるマネージャー以外の何者かによってインストールされたパッケージを対象とし、pipが通常は触れてはならない場所にあることです。pip list -l
ローカルにインストールされたパッケージをリストしますpip install --target=...
。現在空のディレクトリをすべて削除すると、あなたも噛み付きます!