📁 🌎 BitTorrent client built with Python + asyncio
MIT License
Simple BitTorrent client built with Python's asyncio
Implemented specifications:
In this project, I tried to avoid threads and use only asynchronous I/O. As a result, all algorithms and network interaction work in one thread running an asyncio event loop, but there are still a few additional threads:
Program sources depend on Python 3.5+ features: they are annotated with type hints (PEP 0484) and
use coroutines with async
/await
syntax (PEP 0492).
The program requires Python 3.5+ and works on Linux, macOS, and Windows. You also need PyQt 5 to run GUI.
On Ubuntu 16.04 or newer, run:
sudo apt-get install python3-pip python3-pyqt5
git clone https://github.com/borzunov/bit-torrent.git && cd bit-torrent
sudo python3 -m pip install -r requirements.txt
On macOS, run:
python3 -m pip install PyQt5
git clone https://github.com/borzunov/bit-torrent.git && cd bit-torrent
python3 -m pip install -r requirements.txt
Run:
python3 torrent_gui.py
If torrent files are provided as command line arguments, corresponding adding dialogs will be opened.
Start a daemon:
./torrent_cli.py start &
(optional) Look at a list of files in a torrent you want to download:
./torrent_cli.py show ./examples/debian-11.2.0-amd64-netinst.iso.torrent
Specify a download directory and add the torrent to the daemon:
./torrent_cli.py add ./examples/debian-11.2.0-amd64-netinst.iso.torrent -d ./downloads
If the torrent contains more than one file, you can select which files you want to download
using --include
and --exclude
options. For more information run:
./torrent_cli.py add --help
Watch torrent status:
watch ./torrent_cli.py status
Add -v
to increase output verbosity.
You also can add more torrents, pause, resume, and remove them. For more information run:
./torrent_cli.py --help
To stop the daemon run:
./torrent_cli.py stop
The daemon will restore its state after restart.
You can enable a verbose debug mode for GUI and CLI daemons by adding --debug
flag after the script name.
You may also want to enable asyncio debug mode. This is done as follows:
PYTHONASYNCIODEBUG=1 python3 -Wdefault torrent_gui.py --debug
Copyright © 2016-2017 Alexander Borzunov