rarfile FAQ¶
Table of Contents
- rarfile FAQ
- What are the dependencies?
- Does it parse
unrar
output to get archive contents? - Will rarfile support wrapping unrarlib/unrar.dll/unrar.so in the future?
- How can I get it work on Windows?
- How can I get it work on Linux/MacOS?
- How to avoid the need for user to manually install rarfile/unrar?
- Will it support creating RAR archives?
- What is the USE_EXTRACT_HACK?
What are the dependencies?¶
It depends on unrar
command-line utility to do the actual decompression.
Note that by default it expect it to be in PATH
. If unrar
launching fails, you need to fix this.
Alternatively, rarfile
can also use either unar from TheUnarchiver
or bsdtar from libarchive as decompression backend. From those
unar
is preferred as bsdtar
has very limited support for RAR archives.
It depends on cryptography or PyCryptodome modules to process archives with password-protected headers.
Does it parse unrar
output to get archive contents?¶
No, rarfile
parses RAR structure in Python code. Also it can
read uncompressed files from archive without external utility.
Will rarfile support wrapping unrarlib/unrar.dll/unrar.so in the future?¶
No. The current architecture - parsing in Python and decompression with command line tools work well across all interesting operating systems (Windows/Linux/MacOS), wrapping a library does not bring any advantages.
Simple execution of command-line tools is also legally simpler situation than linking with external library.
How can I get it work on Windows?¶
On Windows the unrar.exe
is not in PATH
so simple Popen("unrar ..")
does not work.
Solutions:
- Add location of
unrar.exe
to PATH. - Copy
unrar.exe
to system directory that is in PATH, eg.C:\Windows
.
It can be tested by simply opening command-line console and running unrar
.
How can I get it work on Linux/MacOS?¶
It fails because unrar
is not installed or not in PATH.
- Install
unrar
. - Make sure the location is in PATH.
It can be tested by simply opening command-line console and running unrar
.
Instead unrar
it might be preferable to install unar
.
How to avoid the need for user to manually install rarfile/unrar?¶
Include rarfile.py
and/or unrar
(or unar
) with your application.
Will it support creating RAR archives?¶
No. RARLAB is not interested in RAR becoming open format and specifically discourages writing RAR creation software.
In the meantime use either Zip (better compatibility) or 7z (better compression) format for your own archives.
What is the USE_EXTRACT_HACK?¶
RarFile uses unrar
to extract compressed files. But when extracting
single file from archive containing many entries, unrar
needs to parse
whole archive until it finds the right entry. This makes random-access
to entries slow. To avoid that, RarFile remembers location of compressed
data for each entry and on read it copies it to temporary archive containing
only data for that one file, thus making unrar
fast.
The logic is only activated for entries smaller than rarfile.HACK_SIZE_LIMIT
(20M by default). Bigger files are accessed directly from RAR.
Note - it only works for non-solid archives. So if you care about random access to files in your archive, do not create solid archives.