Простой архиватор RAR 5.0, реализованный на Python 3.x. Создаёт архивы в режиме store (без сжатия). Архивы совместимы с официальным unrar 5.x и выше.
- Создаёт архивы RAR 5.0
- Только режим store (без сжатия)
- Поддержка добавления файлов и папок
- Совместим с официальным unrar
- Улучшенная обработка ошибок с кастомными исключениями
Реализация использует только режим store и не реализует патентованные алгоритмы RAR 5, такие как RangeCoder или специфические улучшения LZ-77. Проект разработан для юридической безопасности и не нарушает патенты.
- Python 3.10+ (стандартная библиотека: struct, pathlib, zlib, os, sys, logging)
- cryptography (для шифрования:
pip install cryptography)
python rar.py a archive.rar file1.txt folder/from rar import create_rar
import pathlib
create_rar(pathlib.Path("archive.rar"), [pathlib.Path("file1.txt"), pathlib.Path("folder/")])- Создание архива с файлами:
python rar.py a myarchive.rar file1.txt file2.txt - Добавление папки:
python rar.py a myarchive.rar myfolder/ - С шифрованием:
python rar.py a myarchive.rar file.txt --password mypass - С замером времени:
python rar.py a myarchive.rar largefile.dat --verbose
- Для больших файлов используйте
--verboseдля вывода времени выполнения. - Режим store не сжимает данные, поэтому размер архива = сумме размеров файлов.
- Оптимизирован для стандартных случаев; для >1GB файлов рассмотрите буферное чтение (не реализовано).
- Создайте архив:
python rar.py a test.rar file1.txt folder/ - Распакуйте:
unrar x test.rar - Сравните контрольные суммы оригинальных и распакованных файлов
- InvalidPathError: Недействительные пути.
- FileReadError: Ошибки чтения файлов.
- RarCreationError: Ошибки создания архива.
- Логирование ошибок в stderr.
- Архив не распаковывается? Убедитесь, что unrar версии 5.x или выше установлен. Проверьте совместимость ОС.
- Ошибка "Путь не существует"? Проверьте, что файлы/директории существуют, доступны и не повреждены.
- Долгое создание архива? Для больших файлов используйте
--verboseдля отслеживания прогресса. Избегайте добавления тысяч файлов одновременно. - Подозрительные пути в логах? Это предупреждения о path traversal (пути вне текущей директории). Проверьте входные аргументы — архиватор логирует, но продолжает работу.
- Ошибка "Неожиданная ошибка"? Проверьте логи stderr. Возможно, проблема с правами доступа или повреждёнными файлами.
- Можно ли сжимать файлы? Нет, только режим store (без сжатия) для юридической безопасности.
- Поддерживает ли пароли? Да, шифрование AES-256 с --password.
- Как распаковать архив? Используйте официальный unrar:
unrar x archive.rar(запросит пароль если зашифрован). - Безопасно ли использовать? Да, логирует подозрительные пути. Шифрование защищает данные.
- Как добавить unit-тесты? Создайте
test_rar.pyс pytest для функций вродеencode_vint.
- Архиватор логирует попытки path traversal (выход за пределы текущей директории) для безопасности.
- Не используйте с непроверенными входными данными.
- RAR 5.0 store mode не шифрует данные — для чувствительных файлов рассмотрите шифрование.
- Для улучшений: создайте issue или PR на GitHub.
- Добавьте unit-тесты для новых функций.
- Соблюдайте PEP8 и документируйте изменения.
MIT License. Проект распространяется свободно, без гарантий.
Для вопросов или вклада: создайте issue на GitHub.