Update quickstart.md
This commit is contained in:
+81
-23
@@ -1,19 +1,40 @@
|
||||
# Quickstart — Electrum (running from source)
|
||||
# Quickstart - Electrum Purple from source
|
||||
|
||||
This guide creates a complete local `.venv` on Ubuntu for:
|
||||
|
||||
- desktop Qt GUI
|
||||
- QML GUI
|
||||
- hardware-wallet Python dependencies
|
||||
- tests and coverage
|
||||
|
||||
## System prerequisites
|
||||
|
||||
```bash
|
||||
sudo apt-get install git python3.12 python3.12-venv libsecp256k1-dev xvfb
|
||||
sudo apt update
|
||||
sudo apt install -y \
|
||||
git python3 python3-venv python3-dev build-essential pkg-config automake libtool gettext \
|
||||
libsecp256k1-dev libusb-1.0-0-dev libudev-dev libhidapi-dev libzbar0 \
|
||||
libgl1 libegl1 libxkbcommon-x11-0 libxcb-cursor0 libxcb-xinerama0 \
|
||||
libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 \
|
||||
libxcb-render-util0 libxcb-shape0 libxcb-xfixes0 qt6-wayland xvfb
|
||||
```
|
||||
|
||||
> `libsecp256k1-dev` avoids recompiling the C library locally.
|
||||
> `xvfb` is only needed to run QML tests without a physical display.
|
||||
Notes:
|
||||
|
||||
- `libsecp256k1-dev` avoids recompiling secp256k1 via `electrum_ecc`.
|
||||
- `libzbar0` enables QR scanning/reading support.
|
||||
- `xvfb` is useful for GUI/QML tests on headless systems.
|
||||
- The `libxcb-*`, `libgl1`, `libegl1`, and `qt6-wayland` packages avoid common PyQt6 runtime errors on Ubuntu.
|
||||
|
||||
---
|
||||
|
||||
## 1. Clone the repository
|
||||
|
||||
---
|
||||
If you are already inside the repository, just run:
|
||||
|
||||
```bash
|
||||
git submodule update --init --recursive
|
||||
```
|
||||
|
||||
## 2. Create and activate the virtual environment
|
||||
|
||||
@@ -22,29 +43,40 @@ python3 -m venv .venv
|
||||
source .venv/bin/activate
|
||||
```
|
||||
|
||||
Upgrade packaging tools:
|
||||
|
||||
```bash
|
||||
python -m pip install --upgrade pip setuptools wheel
|
||||
python -m pip install -r contrib/requirements/requirements-build-base.txt
|
||||
python -m pip install "Cython>=0.27"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. Install dependencies
|
||||
|
||||
### Tests only (no GUI)
|
||||
### Complete development environment
|
||||
|
||||
```bash
|
||||
ELECTRUM_ECC_DONT_COMPILE=1 pip install -r contrib/requirements/requirements.txt \
|
||||
"cryptography>=2.6" "dnspython[DNSSEC]>=2.2,<2.5" \
|
||||
pytest coverage \
|
||||
"pycryptodomex>=3.7" pyaes \
|
||||
&& ELECTRUM_ECC_DONT_COMPILE=1 pip install -e .
|
||||
ELECTRUM_ECC_DONT_COMPILE=1 python -m pip install -e ".[full,qml_gui,tests]"
|
||||
python -m pip install -r contrib/requirements/requirements-ci.txt
|
||||
python -m pip install pytest-xdist pillow
|
||||
```
|
||||
|
||||
### Tests + Qt/QML GUI (Android)
|
||||
What this installs:
|
||||
|
||||
- base runtime dependencies from `contrib/requirements/requirements.txt`
|
||||
- `full`: Qt GUI, crypto, and hardware-wallet Python dependencies
|
||||
- `qml_gui`: PyQt6/Qt6 packages suitable for the QML GUI
|
||||
- `tests`: extra Python packages used by the test suite
|
||||
- `requirements-ci.txt`: `pytest`, `coverage`, and `coveralls`
|
||||
- `pytest-xdist`: optional parallel test execution with `-n auto`
|
||||
- `pillow`: optional image support used by some hardware-wallet/plugin flows
|
||||
|
||||
Verify the main imports:
|
||||
|
||||
```bash
|
||||
ELECTRUM_ECC_DONT_COMPILE=1 pip install -r contrib/requirements/requirements.txt \
|
||||
"cryptography>=2.6" "dnspython[DNSSEC]>=2.2,<2.5" \
|
||||
pytest coverage \
|
||||
"pycryptodomex>=3.7" pyaes \
|
||||
"pyqt6~=6.10" "pyqt6-qt6~=6.10" \
|
||||
&& ELECTRUM_ECC_DONT_COMPILE=1 pip install -e .
|
||||
python -c "import PyQt6.QtCore, PyQt6.QtQml, PyQt6.QtQuick, PyQt6.QtMultimedia, electrum_ecc, cryptography; print('ok')"
|
||||
```
|
||||
|
||||
---
|
||||
@@ -55,14 +87,17 @@ ELECTRUM_ECC_DONT_COMPILE=1 pip install -r contrib/requirements/requirements.txt
|
||||
# Qt GUI (default)
|
||||
./run_electrum
|
||||
|
||||
# Qt GUI on BitcoinPurple network
|
||||
./run_electrum --bitcoinpurple -g qt
|
||||
|
||||
# BitcoinPurple network
|
||||
./run_electrum --bitcoinpurple
|
||||
|
||||
# BitcoinPurple testnet
|
||||
./run_electrum --bitcoinpurple_testnet
|
||||
|
||||
# QML GUI (Android-style)
|
||||
./run_electrum --gui qml
|
||||
# QML GUI
|
||||
./run_electrum --bitcoinpurple -g qml
|
||||
|
||||
# Text UI (terminal)
|
||||
./run_electrum --gui text
|
||||
@@ -71,6 +106,13 @@ ELECTRUM_ECC_DONT_COMPILE=1 pip install -r contrib/requirements/requirements.txt
|
||||
./run_electrum daemon -d
|
||||
```
|
||||
|
||||
After the editable install, the generated command should also work while the venv is active:
|
||||
|
||||
```bash
|
||||
electrum-purple --bitcoinpurple -g qt
|
||||
electrum-purple --bitcoinpurple -g qml
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. Run tests
|
||||
@@ -88,11 +130,27 @@ pytest tests/test_bitcoin.py -v
|
||||
# BitcoinPurple tests
|
||||
pytest tests/test_bitcoinpurple.py -v
|
||||
|
||||
# blockchain + bitcoin + BitcoinPurple together
|
||||
# Blockchain + Bitcoin + BitcoinPurple together
|
||||
pytest tests/test_blockchain.py tests/test_bitcoin.py tests/test_bitcoinpurple.py -v
|
||||
|
||||
# QML tests (requires PyQt6 and xvfb)
|
||||
xvfb-run pytest tests/qml/ -v
|
||||
# QML tests
|
||||
QT_QPA_PLATFORM=offscreen pytest tests/qml -v
|
||||
|
||||
# QML tests on a headless system
|
||||
xvfb-run -a pytest tests/qml -v
|
||||
```
|
||||
|
||||
Run tests with coverage:
|
||||
|
||||
```bash
|
||||
# Full suite with coverage
|
||||
coverage run --source=electrum -m pytest tests -v
|
||||
coverage report -m
|
||||
coverage html
|
||||
|
||||
# QML tests with coverage
|
||||
QT_QPA_PLATFORM=offscreen coverage run --source=electrum -m pytest tests/qml -v
|
||||
coverage report -m
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user