ここに質問をリストしました。2019 年 10 月アップグレード: pip アップグレードに失敗しました · 問題 #5844 · msys2/MINGW-packages:デフォルトでは、pip
MSYS2では一部のファイルが表示されるため、更新を拒否しています。pacman -Syu
基本的にこれをダンプします。
...
:: Proceed with installation? [Y/n] y
:: Retrieving packages...
mingw-w64-x86_64-gl... 4.6 MiB 4.97M/s 00:01 [#####################] 100%
mingw-w64-x86_64-gn... 1942.9 KiB 1045K/s 00:02 [#####################] 100%
(18/18) checking keys in keyring [#####################] 100%
(18/18) checking package integrity [#####################] 100%
(18/18) loading package files [#####################] 100%
(18/18) checking for file conflicts [#####################] 100%
error: failed to commit transaction (conflicting files)
python2-pip: /c/msys64/usr/lib/python2.7/site-packages/pip/_internal/commands/debug.py exists in filesystem
python2-pip: /c/msys64/usr/lib/python2.7/site-packages/pip/_internal/commands/debug.pyc exists in filesystem
...
pipを削除したくないのですが(パックマン「ファイルシステムに存在します」エラー)ファイルを別の場所に「ただ」移動して更新を実行できます。もちろん、移動するファイルの元のファイルの場所を保存したいと思います。
tar
だから私はこれらのファイルをアーカイブに保存し(--remove-files
元のファイルも削除して再度更新しないように)、更新後に復元できると思いました。すでにインストールされている他のパッケージが必要な場合です。
tar
残念ながら、ループ内のファイルでアーカイブを更新する正しい呼び出しが実際に見つかりませんwhile
(つまり、スペースで区切られた「1行」のファイルのリストはありません)。
これにより、アーカイブにファイルが1つだけ作成されます。
$ pacman -Syu | grep exists | awk '{print $2}' | while read f; do tar -czf /tmp/bckp.tar "$f"; done
:: Proceed with installation? [Y/n] y
error: failed to commit transaction (conflicting files)
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
...
$ tar tzvf /tmp/bckp.tar
-rw-r--r-- user/None 13854 2019-09-02 09:07 c/msys64/usr/lib/python3.7/site-packages/pip/_vendor/urllib3/packages/rfc3986/validators.py
これは実行されません:
$ pacman -Syu | grep exists | awk '{print $2}' | while read f; do tar -czvf --strip-components=1 --append /tmp/bckp.tar.gz "$f"; done
:: Proceed with installation? [Y/n] y
error: failed to commit transaction (conflicting files)
tar: You may not specify more than one '-Acdtrux', '--delete' or '--test-label' option
Try 'tar --help' or 'tar --usage' for more information.
tar: You may not specify more than one '-Acdtrux', '--delete' or '--test-label' option
Try 'tar --help' or 'tar --usage' for more information.
...
これも同様です。
$ pacman -Syu | grep exists | awk '{print $2}' | while read f; do tar -zvf --strip-components=1 --append /tmp/bckp.tar.gz "$f"; done
:: Proceed with installation? [Y/n] y
error: failed to commit transaction (conflicting files)
tar: Cannot update compressed archives
Try 'tar --help' or 'tar --usage' for more information.
tar: Cannot update compressed archives
Try 'tar --help' or 'tar --usage' for more information.
...
これにより、既存のファイルに対して「該当するファイルまたはディレクトリがありません」というメッセージが表示されます。
$ pacman -Syu | grep exists | awk '{print $2}' | while read f; do tar -vf --strip-components=1 --append /tmp/bckp.tar.gz "$f"; done
:: Proceed with installation? [Y/n] y
error: failed to commit transaction (conflicting files)
tar: Removing leading `/' from member names
tar: /tmp/bckp.tar.gz: Cannot stat: No such file or directory
/c/msys64/usr/lib/python2.7/site-packages/pip/_internal/commands/debug.py
tar: Removing leading `/' from hard link targets
tar: Exiting with failure status due to previous errors
tar: Removing leading `/' from member names
tar: /tmp/bckp.tar.gz: Cannot stat: No such file or directory
/c/msys64/usr/lib/python2.7/site-packages/pip/_internal/commands/debug.pyc
...
/c/msys64/usr/lib/python2.7/site-packages/pip/_internal/commands/debug.pyc
したがって、次の形式のループにファイルリスト(絶対ファイルパス)があるとします。絶対パスの最初の部分が削除された状態でアーカイブに入るようにすべてのwhile
ファイルをアーカイブに追加するにはどうすればよいですか(たとえば、.tar
上記のファイルは終了しますtar
)msys64/usr/lib/python2.7/site-packages/pip/_internal/commands/debug.pyc
。
答え1
さて、最後に正しい呼び出しを見つけたようです。追加は抽出に適用されるsed
ためです。--strip-components
ただ;ここでは、/c/
ファイルパス文字列から手動で削除し、tar
変更ディレクトリにスイッチを/c/
使用するように指示します。-C
$ pacman -Syu | grep exists | awk '{print $2}' | sed 's_/c/__' | xargs tar -cvf /tmp/bckp.tar -C /c/
:: Proceed with installation? [Y/n] y
error: failed to commit transaction (conflicting files)
msys64/usr/lib/python2.7/site-packages/pip/_internal/commands/debug.py
msys64/usr/lib/python2.7/site-packages/pip/_internal/commands/debug.pyc
msys64/usr/lib/python2.7/site-packages/pip/_internal/distributions/__init__.py
msys64/usr/lib/python2.7/site-packages/pip/_internal/distributions/__init__.pyc
...
...そしてもう一度確認してください。
$ tar tvf /tmp/bckp.tar
-rw-r--r-- user/None 3360 2019-09-02 09:08 msys64/usr/lib/python2.7/site-packages/pip/_internal/commands/debug.py
-rw-r--r-- user/None 4154 2019-09-02 09:08 msys64/usr/lib/python2.7/site-packages/pip/_internal/commands/debug.pyc
-rw-r--r-- user/None 861 2019-09-02 09:08 msys64/usr/lib/python2.7/site-packages/pip/_internal/distributions/__init__.py
-rw-r--r-- user/None 986 2019-09-02 09:08 msys64/usr/lib/python2.7/site-packages/pip/_internal/distributions/__init__.pyc
...