Repeatedly synchronize local workspace with a (slow) remote machine
Project description
LiveSync
Repeatedly synchronize local workspace with a (slow) remote machine. It is available as PyPI package and hosted on GitHub.
Use Case
VS Code Remote Development and similar tools are great as long as your remote machine is powerful enough. But if your target is a Raspberry Pi, Jetson Nano/Xavier/Orin, Beagle Board or similar, it feels like coding in jelly. Especially if you run powerful extensions like Pylance. LiveSync solves this by watching your code for changes and just copying the modifications to the slow remote machine. It works best if you have some kind of reload mechanism in place on the target (NiceGUI, FastAPI or Flask for example).
Usage
BASH
livesync <source> <username>@<host>
LiveSync uses rsync (SSH) to copy the files, so the <username>@<host> must be accessible via SSH (ideally by key, not password or passphrase, because it will be called over and over).
Press CTRL-C to abort the synchronization.
Positional arguments:
<source>local folder<target>target user, host and path (e.g. user@host:~/path; path defaults to source folder name in home directory)<rsync_args>arbitrary rsync parameters after "--"
Options:
--ssh-port SSH_PORTSSH port on target (default: 22)--on-change ON_CHANGEcommand to be executed on remote host after any file change (default: None)--mutex-interval MUTEX_INTERVALinterval in which mutex is updated (default: 10 seconds)
Python
Simple example:
from livesync import Folder, sync
sync(
Folder('.', 'robot:~/navigation'),
Folder('../rosys', 'robot:~/rosys'),
)
Advanced example:
from livesync import Folder, sync
sync(
Folder('.', 'robot:~/navigation', on_change='touch ~/navigation/main.py'),
Folder('../rosys', 'robot:~/rosys', ssh_port=2222).rsync_args(add='-L', remove='--checksum'),
mutex_interval=30,
)
Notes
- We suggest you have some auto-reloading in place on the (slow) target machine, like NiceGUI.
- Only one user per target host should run LiveSync at a time. Therefore LiveSync provides a mutex mechanism.
- You can create a
.syncignorefile in any source directory to skip additional files and directories from syncing. - If a
.syncignorefile doesn't exist, it is automatically created containing.git/,__pycache__/,.DS_Store,*.tmp, and.env.
Installation
python3 -m pip install livesync
Development
For development we suggest to use the following instructions instead of the normal pip installation:
git clone git@github.com:zauberzeug/livesync.git
cd livesync
python3 -m pip uninstall livesync # remove previous installed version
python3 -m pip install -e .
Now you can change the code and call the livesync command from your $PATH variable with the modified code.
Testing
We have build a small testing infrastructure with two docker containers. See tests/README.md for details.
Releases
Just create and push a new tag with the new version name (v0.2.1 for example). After a successful build a new release will be created. This should be edited to describe the changes in the release notes.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file LiveSync-0.3.1.tar.gz.
File metadata
- Download URL: LiveSync-0.3.1.tar.gz
- Upload date:
- Size: 6.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
28a297f32ab3527ffe25dabdcceb241fe5f25e87c501507ef64eb007dbdeeeb2
|
|
| MD5 |
a3a2a426cb744a3b6afaa9c97b30aa65
|
|
| BLAKE2b-256 |
cae1d2aaf79fb5ef367a7b7bae42f15ade7a6f5a624ee1a0e2f36cb58636c948
|
File details
Details for the file LiveSync-0.3.1-py3-none-any.whl.
File metadata
- Download URL: LiveSync-0.3.1-py3-none-any.whl
- Upload date:
- Size: 8.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
71f0386eac764ffdf6006c245f74f0407ea039b9f873f874c97df45cd8f3c331
|
|
| MD5 |
8aab9c1e227b1cd9d139fb9a7a8502a3
|
|
| BLAKE2b-256 |
b7de0f19db4a8dcd6f1a27e437ce8c35c64bdbc5b8902ae021d1f411dafdf9c1
|