pip
ときは、アップグレード時にインストールが失敗することに注意してくださいrequests
。エラーメッセージはcannot import name IncompleteRead
です。
pip
ときは、アップグレード時にインストールが失敗することに注意してくださいrequests
。エラーメッセージはcannot import name IncompleteRead
です。
回答:
組み込みのフラグはまだありませんが、使用できます
pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
注:これには無限の可能性のあるバリエーションがあります。私はこの答えを短くシンプルにしようとしていますが、コメントのバリエーションを提案してください!
古いバージョンのではpip
、代わりにこれを使用できます。
pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
grep
@jawacheにより示唆されるように、編集可能(「-e」)のパッケージ定義をスキップすることです。(はい、grep
+ cut
をsed
or awk
またはperl
orまたは...に置き換えることができます)。
の-n1
フラグはxargs
、1つのパッケージの更新が失敗した場合にすべての停止を防止します(@andsensに感謝)。
pip install -U
、すべてのパッケージが更新されます。apt-getとの競合を引き起こす可能性があります。
tee
元のバージョンのリストを取得できるように、実際のアップグレードを実行する前にaを投入します。たとえば、 pip freeze --local | tee before_upgrade.txt | ...
このようにすると、問題が発生した場合に簡単に元に戻すことができます。
-H
しsudo
ました: $ pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 sudo -H pip install -U
次のPythonコードを使用できます。とは異なりpip freeze
、これは警告とFIXMEエラーを出力しません。
ピップ<10.0.1の場合
import pip
from subprocess import call
packages = [dist.project_name for dist in pip.get_installed_distributions()]
call("pip install --upgrade " + ' '.join(packages), shell=True)
pip> = 10.0.1の場合
import pkg_resources
from subprocess import call
packages = [dist.project_name for dist in pkg_resources.working_set]
call("pip install --upgrade " + ' '.join(packages), shell=True)
import pip
pip.install('packagename')
?
すべてのローカルパッケージをアップグレードするには、あなたが使うことができますpip-review
:
$ pip install pip-review
$ pip-review --local --interactive
pip-review
はのフォークですpip-tools
。@knedlseppによって言及されたpip-tools
問題を参照してください。パッケージは機能しますが、パッケージは機能しなくなります。pip-review
pip-tools
pip-review
バージョン0.5以降の Windowsで動作します。
pip-review --local --auto
Windowsで動作します。他の人にも良いはずです。($は、コマンドプロンプトで使用しているディレクトリです。例:C:/ Users / Username>)
行う
$ pip freeze > requirements.txt
テキストファイルを開き、交換する==
と>=
、および実行
$ pip install -r requirements.txt --upgrade
特定のパッケージでアップグレードが滞っている(場合によっては数が多い)問題がある場合は、ディレクトリ($)に移動し、名前をコメント化して(その前に#を追加)、アップグレードを再度実行します。後でそのセクションのコメントを解除できます。これは、Pythonグローバル環境のコピーにも最適です。
別の方法:
また、pip-reviewメソッドも気に入っています。
py2
$ pip install pip-review
$ pip-review --local --interactive
py3
$ pip3 install pip-review
$ py -3 -m pip_review --local --interactive
「a」を選択してすべてのパッケージをアップグレードできます。1つのアップグレードが失敗した場合は、再度実行して次のアップグレードを続行します。
requirements.txt
の=={version}
。例:すべての行のpython-dateutil==2.4.2
to python-dateutil
。
$ pip freeze | cut -d '=' -f1> requirements.txt
バージョンを削除するには
pip3 install -r <(pip3 freeze) --upgrade
効果的に<(pip3 freeze)
匿名コマンドである1つのコマンドに短縮できますが、ファイルオブジェクトとして機能します
Rob van der Woudeによる優れたドキュメントを参照FOR
した後のWindowsバージョン
for /F "delims===" %i in ('pip freeze -l') do pip install -U %i
for /F "delims= " %i in ('pip list --outdated') do pip install -U %i
「古くなった」パッケージのみを更新するため、より
for /F "skip=2 delims= " %i in ('pip list --outdated') do pip install --upgrade %i
。これをバッチファイルから実行する場合は、の%%i
代わりに使用してください%i
。また、pip
を使用してこのコマンドを実行する前に更新する方がわかりやすいことにも注意してくださいpython -m pip install --upgrade pip
。
$ pip install pipupgrade
$ pipupgrade --verbose --latest --yes
pipupgradeは、システム、ローカル、またはパッケージをrequirements.txt
ファイルからアップグレードするのに役立ちます!また、変更を壊さないパッケージを選択的にアップグレードします。また、pipupgradeは、複数のPython環境内に存在するパッケージを確実にアップグレードします。Python2.7 +、Python3.4 +およびpip9 +、pip10 +、pip18 +、pip19 +と互換性があります。
注:私はツールの作成者です。
Checking...
試してみると永遠に行き詰まっています。
[0;93mChecking...[0m
ModuleNotFoundError: No module named 'ctypes.windll'
古くなったパッケージを印刷できます
pip freeze | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'
pip freeze --local | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'
python -m pip list outdated
(ただし、要件の形式ではありません)。
このオプションは私にはもっと簡単で読みやすいようです:
pip install -U `pip list --outdated | awk 'NR>2 {print $1}'`
説明はpip list --outdated
、この形式ですべての古いパッケージのリストを出力することです:
Package Version Latest Type
--------- ------- ------ -----
fonttools 3.31.0 3.32.0 wheel
urllib3 1.24 1.24.1 wheel
requests 2.20.0 2.20.1 wheel
awkコマンドでNR>2
、最初の2つのレコード(行)をスキップし、{print $1}
各行の最初の単語を選択します(SergioAraujoによって提案されたように、実際にレコードのスキップを処理できるtail -n +3
ため、削除awk
しました)。
awk 'NR>2 {print $1}'
が出力をクレンジングするのを回避できます
次のワンライナーが助けになるかもしれません:
(pip> 20.0)
pip list --format freeze --outdated | sed 's/=.*//g' | xargs -n1 pip install -U
古いバージョン:
pip list --format freeze --outdated | sed 's/(.*//g' | xargs -n1 pip install -U
xargs -n1
エラーが発生しても続行します。
何が省略され、何がエラーを発生させるかについてさらに細かい制御が必要な場合は、-n1
フラグを追加せず、個別のエラーごとに次の行を「パイプ」して、無視するエラーを明示的に定義する必要があります。
| sed 's/^<First characters of the error>.*//'
これが実際の例です:
pip list --format freeze --outdated | sed 's/=.*//g' | sed 's/^<First characters of the first error>.*//' | sed 's/^<First characters of the second error>.*//' | xargs pip install -U
| sed 's/^<First characters of the error>.*//'
です。必要な数だけ追加できます。ありがとうございました!
pip list --outdated | cut -d ' ' -f 1 | xargs -n 1 pip install --upgrade
より堅牢なソリューション
pip3の場合、これを使用します。
pip3 freeze --local |sed -rn 's/^([^=# \t\\][^ \t=]*)=.*/echo; echo Processing \1 ...; pip3 install -U \1/p' |sh
ピップの場合は、3を削除するだけです。
pip freeze --local |sed -rn 's/^([^=# \t\\][^ \t=]*)=.*/echo; echo Processing \1 ...; pip install -U \1/p' |sh
OSXの奇妙さ
OSXは、2017年7月現在、sedの非常に古いバージョン(12歳)が同梱されています。拡張正規表現を取得するには、上記のソリューションで-rの代わりに-Eを使用します。
一般的なソリューションで問題を解決する
このソリューションは適切に設計およびテストされています1が、最も一般的なソリューションでも問題があります。
上記のコマンドは、sedおよびshと組み合わせて最も単純で移植性の高いpip構文を使用して、これらの問題を完全に克服します。sed操作の詳細は、コメント付きバージョン2で精査できます。
詳細
[1] Linux 4.8.16-200.fc24.x86_64クラスターでテストおよび定期的に使用され、他の5つのLinux / Unixフレーバーでテストされました。Windows 10にインストールされたCygwin64でも動作します。iOSでのテストが必要です。
[2]コマンドの構造をより明確に見るために、これはコメント付きの上記のpip3コマンドとまったく同じです。
# match lines from pip's local package list output
# that meet the following three criteria and pass the
# package name to the replacement string in group 1.
# (a) Do not start with invalid characters
# (b) Follow the rule of no white space in the package names
# (c) Immediately follow the package name with an equal sign
sed="s/^([^=# \t\\][^ \t=]*)=.*"
# separate the output of package upgrades with a blank line
sed="$sed/echo"
# indicate what package is being processed
sed="$sed; echo Processing \1 ..."
# perform the upgrade using just the valid package name
sed="$sed; pip3 install -U \1"
# output the commands
sed="$sed/p"
# stream edit the list as above
# and pass the commands to a shell
pip3 freeze --local |sed -rn "$sed" |sh
[3] PythonまたはPIPコンポーネントのアップグレードでも使用されるPythonまたはPIPコンポーネントのアップグレードは、デッドロックまたはパッケージデータベースの破損の潜在的な原因になる可能性があります。
sed
OS XのジュラシックBSDを克服する別の方法は、gsed
代わりに(GNU sed)を使用することです。それを取得するにはbrew install gnu-sed
これはもっと簡潔に見えます。
pip list --outdated | cut -d ' ' -f1 | xargs -n1 pip install -U
説明:
pip list --outdated
このような行を取得します
urllib3 (1.7.1) - Latest: 1.15.1 [wheel]
wheel (0.24.0) - Latest: 0.29.0 [wheel]
ではcut -d ' ' -f1
、-d ' '
「スペース」を区切り文字として設定し-f1
ます。これは、最初の列を取得することを意味します。
したがって、上記の行は次のようになります。
urllib3
wheel
次に、に渡してxargs
、コマンドを実行し、pip install -U
各行を引数として追加します
-n1
各コマンドpip install -U
に渡される引数の数を1に制限します
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
アップグレードについても同じ問題がありました。ことは、私はすべてのパッケージをアップグレードすることはありません。プロジェクトが壊れる可能性があるので、必要なものだけをアップグレードします。
パッケージごとにアップグレードし、requirements.txtファイルを更新する簡単な方法がなかったため、選択したパッケージ(またはすべてのパッケージ)のファイル内のバージョンも更新するrequirements.txt
このpip-upgraderを作成しました。
取り付け
pip install pip-upgrader
使用法
virtualenvをアクティブにします(重要なのは、アップグレードされたパッケージの新しいバージョンも現在のvirtualenvにインストールするためです)。
cd
プロジェクトディレクトリに移動し、次のコマンドを実行します。
pip-upgrade
高度な使用法
要件が標準以外の場所にある場合は、引数として送信します。
pip-upgrade path/to/requirements.txt
アップグレードするパッケージがすでにわかっている場合は、引数として送信します。
pip-upgrade -p django -p celery -p dateutil
プレリリース/ポストリリースバージョンにアップグレードする必要がある場合は--prerelease
、コマンドに引数を追加します。
完全な開示:このパッケージを作成しました。
virtualenv
有効になっていない場合pip-upgrade --skip-virtualenv-check
https://github.com/cakebread/yolkから:
$ pip install -U `yolk -U | awk '{print $1}' | uniq`
ただし、最初に卵黄を取得する必要があります。
$ sudo pip install -U yolk
@Ramanaの回答のワンライナーバージョン。
python -c 'import pip, subprocess; [subprocess.call("pip install -U " + d.project_name, shell=1) for d in pip.get_installed_distributions()]'
`
私がピップ問題の議論で見つけた最も簡単で最速の解決策は次のとおりです:
pip install pipdate
pipdate
awk更新パッケージを使用:
pip install -U $(pip freeze | awk -F'[=]' '{print $1}')
Windows PowerShellの更新
foreach($p in $(pip freeze)){ pip install -U $p.Split("=")[0]}
あなたはこれを試すことができます:
for i in ` pip list|awk -F ' ' '{print $1}'`;do pip install --upgrade $i;done
かなり驚くべき卵黄はこれを簡単にします。
pip install yolk3k # don't install `yolk`, see https://github.com/cakebread/yolk/issues/35
yolk --upgrade
ヨークの詳細情報:https : //pypi.python.org/pypi/yolk/0.4.3
それはあなたがおそらく役に立つと思うであろう多くのことをすることができます。
yolk
ましたyolk3k
。元の回答には間違いなくpython3に関する問題がありました。
@Ramanaの答えは、私にとってここで最もうまくいきましたが、私はいくつかのキャッチを追加する必要がありました:
import pip
for dist in pip.get_installed_distributions():
if 'site-packages' in dist.location:
try:
pip.call_subprocess(['pip', 'install', '-U', dist.key])
except Exception, exc:
print exc
site-packages
開発パッケージはシステムのsite-packagesディレクトリにないため、このチェックでは除外されます。try-exceptは、PyPIから削除されたパッケージを単にスキップします。
@endolith:私も簡単にできることを望んでいましたがpip.install(dist.key, upgrade=True)
、pipがコマンドライン以外で使用されることを意図していたようには見えません(ドキュメントには内部APIが記載されておらず、pip開発者は使用していませんでした) docstrings)。
pip
明らかにパッケージを/usr/local/lib/python2.7/dist-packages
または同様に配置します。if
この場合、ステートメントで「site-packages」の代わりに「/ usr / local / lib /」を使用できます。
pip_upgrade_outdated
仕事をしていません。そのドキュメントによると:
usage: pip_upgrade_outdated [-h] [-3 | -2 | --pip_cmd PIP_CMD]
[--serial | --parallel] [--dry_run] [--verbose]
[--version]
Upgrade outdated python packages with pip.
optional arguments:
-h, --help show this help message and exit
-3 use pip3
-2 use pip2
--pip_cmd PIP_CMD use PIP_CMD (default pip)
--serial, -s upgrade in serial (default)
--parallel, -p upgrade in parallel
--dry_run, -n get list, but don't upgrade
--verbose, -v may be specified multiple times
--version show program's version number and exit
ステップ1:
pip install pip-upgrade-outdated
ステップ2:
pip_upgrade_outdated
プルリクエストを介してpipフォークに送信されます。その間、私が書いたこのpipライブラリソリューションを使用します。
from pip import get_installed_distributions
from pip.commands import install
install_cmd = install.InstallCommand()
options, args = install_cmd.parse_args([package.project_name
for package in
get_installed_distributions()])
options.upgrade = True
install_cmd.run(options, args) # Chuck this in a try/except and print as wanted
これはPython 3用のPowerShellソリューションです。
pip3 list --outdated --format=legacy | ForEach { pip3 install -U $_.split(" ")[0] }
そしてPython 2の場合:
pip2 list --outdated --format=legacy | ForEach { pip2 install -U $_.split(" ")[0] }
これにより、パッケージが1つずつアップグレードされます。だから
pip3 check
pip2 check
その後、依存関係が壊れていないことを確認する必要があります。
どうですか:
pip install -r <(pip freeze) --upgrade
Windowsで最も短くて簡単です。
pip freeze > requirements.txt && pip install --upgrade -r requirements.txt && rm requirements.txt
これはもっと効果的ではないですか?
pip3 list -o | grep -v -i warning | cut -f1 -d' ' | tr " " "\n" | awk '{if(NR>=3)print}' | cut -d' ' -f1 | xargs -n1 pip3 install -U
pip list -o
古いパッケージをリストします。grep -v -i warning
warning
更新時のエラーを回避するために反転一致をオンにするcut -f1 -d1' '
最初の単語-古いパッケージの名前を返します。tr "\n|\r" " "
からの複数行の結果をcut
、スペースで区切られた単一行のリストに変換します。awk '{if(NR>=3)print}'
ヘッダー行をスキップします cut -d' ' -f1
最初の列をフェッチしますxargs -n1 pip install -U
左側のパイプから引数を1つ取り、それをコマンドに渡してパッケージのリストをアップグレードします。kerberos iwlib PyYAML Could pygpgme Could Could Could ...
すべての「Could」に注意してください。これらはpip list -o
、「要件<パッケージ>を満たすダウンロードを見つけることができませんでした」の出力に由来します
pip list -o
か?
# pip list -o; urwid (Current: 1.1.1 Latest: 1.3.0); Could not find any downloads that satisfy the requirement python-default-encoding; pycups (Current: 1.9.63 Latest: 1.9.68); Could not find any downloads that satisfy the requirement policycoreutils-default-encoding; Could not find any downloads that satisfy the requirement sepolicy;
pip install -U $(pip list -o | grep -i current | cut -f1 -d' ' | tr "\n|\r" " ")
。そうしないと、不要な1行を簡単に見逃して、DrStrangeprkが述べた結果が得られる可能性があります。
xargs
代わりに使用することを強くお勧めします。pip list -o | awk '/Current:/ {print $1}' | xargs -rp -- pip install -U
この-r
フラグpip install -U
は、古いパッケージがない場合に実行されないようにします。この-p
フラグは、コマンドを実行する前にユーザーに確認を求めます。-n1
フラグを追加して、各パッケージを個別にインストールする前にプロンプトを表示させることができます。
adm権限を持つpowershell 5.1の1行、python 3.6.5およびpip ver 10.0.1:
pip list -o --format json | ConvertFrom-Json | foreach {pip install $_.name -U --no-warn-script-location}
リストに壊れたパッケージや特別なホイールがない場合はスムーズに動作します...
pip freeze
(bundle install
またはなどnpm shrinkwrap
)。いじくり回す前にそのコピーを保存するのが最善です。