Удалите конфликтующие файлы, не принадлежащие каким-либо пакетам в Arch Linux
Сегодня я столкнулся с проблемой - "ошибка: не удалось зафиксировать транзакцию (конфликтующие файлы)", когда я пытался установить пакет на свой рабочий стол Arch Linux. Он продолжал выдавать ошибки, когда я пытался установить любые пакеты с зависимостями Python. Вот пример вывода при попытке установить или обновить любой пакет.
error: failed to commit transaction (conflicting files)
python-requests: /usr/lib/python3.6/site-packages/requests/__init__.py exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/__pycache__/__init__.cpython-36.pyc exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/__pycache__/_internal_utils.cpython-36.pyc exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/__pycache__/adapters.cpython-36.pyc exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/__pycache__/api.cpython-36.pyc exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/__pycache__/auth.cpython-36.pyc exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/__pycache__/certs.cpython-36.pyc exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/__pycache__/compat.cpython-36.pyc exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/__pycache__/cookies.cpython-36.pyc exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/__pycache__/exceptions.cpython-36.pyc exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/__pycache__/hooks.cpython-36.pyc exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/__pycache__/models.cpython-36.pyc exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/__pycache__/sessions.cpython-36.pyc exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/__pycache__/status_codes.cpython-36.pyc exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/__pycache__/structures.cpython-36.pyc exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/__pycache__/utils.cpython-36.pyc exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/_internal_utils.py exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/adapters.py exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/api.py exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/auth.py exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/certs.py exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/compat.py exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/cookies.py exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/exceptions.py exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/hooks.py exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/models.py exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/packages/__init__.py exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/packages/__pycache__/__init__.cpython-36.pyc exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/packages/idna/__init__.py exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/packages/idna/__pycache__/__init__.cpython-36.pyc exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/packages/idna/__pycache__/codec.cpython-36.pyc exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/packages/idna/__pycache__/compat.cpython-36.pyc exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/packages/idna/__pycache__/core.cpython-36.pyc exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/packages/idna/__pycache__/idnadata.cpython-36.pyc exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/packages/idna/__pycache__/intranges.cpython-36.pyc exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/packages/idna/__pycache__/uts46data.cpython-36.pyc exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/packages/idna/codec.py exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/packages/idna/compat.py exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/packages/idna/core.py exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/packages/idna/idnadata.py exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/packages/idna/intranges.py exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/packages/idna/uts46data.py exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/sessions.py exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/status_codes.py exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/structures.py exists in filesystem
python-requests: /usr/lib/python3.6/site-packages/requests/utils.py exists in filesystem
Errors occurred, no packages were upgraded.
После небольшого поиска на вики-странице Arch Linux я обнаружил, что причина может быть в следующем: "pacman обнаружил конфликт файлов и не будет перезаписывать файлы за вас". Ошибка такого типа может возникнуть, если ваша система Arch Linux, вероятно, была некорректно завершена во время или сразу после операции pacman. В результате у вас осталась сломанная база данных pacman и пустые файлы.
Удалите конфликтующие файлы, не принадлежащие каким-либо пакетам в Arch Linux
Решение исправить эту ошибку — заставить pacman перезаписать эти конфликтующие файлы с помощью команды:
sudo pacman -S --force <package-name>
Если это не помогает, вам нужно выяснить, не принадлежат ли эти файлы какому-либо пакету, а затем либо удалить, либо переименовать их.
Чтобы узнать, принадлежат ли файлы какому-либо пакету, как показано ниже. В моем случае я выполнил следующую команду:
sudo pacman -Qo /usr/lib/python3.6/site-packages/requests/__init__.py
Приведенная выше команда проверит, есть ли у какого-либо пакета /usr/lib/python3.6/site-packages/requests/__init__.py или нет.
Пример вывода:
error: No package owns /usr/lib/python3.6/site-packages/requests/__init__.py
Как видно из приведенного выше примера, ни один пакет не владеет файлом __init__.py. Я проверил все файлы в приведенном выше выводе. Ни один из них не принадлежит никаким пакетам. Итак, если вы обнаружите какие-либо файлы, которые не принадлежат какому-либо пакету, просто переименуйте или удалите эти файлы. Прежде чем удалять их, просто сделайте резервную копию этих файлов (то есть всех файлов в каталоге /usr/lib/python3.6/site-packages/requests/), чтобы вы могли восстановить их, если что-то пойдет не так.
В моем случае я создаю резервную копию всего содержимого папки /usr/lib/python3.6/site-packages/requests/.
cp -fr /usr/lib/python3.6/site-packages/requests/. backup/
Затем я удалил все файлы в приведенном выше выводе.
sudo /usr/lib/python3.6/site-packages/requests/__init__.py
[...]
sudo rm -fr /usr/lib/python3.6/site-packages/requests/utils.py
На этот раз я смогу установить пакет без каких-либо ошибок.
Ресурс:
- https://wiki.archlinux.org/index.php/Pacman#Troubleshooting