Metadata-Version: 2.4
Name: duplicity
Version: 3.2.0
Summary: Encrypted backup using rsync algorithm
Author-email: Kenneth Loafman <kenneth@loafman.com>
Maintainer: Edgar Soldin, Thomas Laubrock
Project-URL: Homepage, http://duplicity.us
Project-URL: Download, https://gitlab.com/duplicity/duplicity/-/releases
Project-URL: Issues, https://gitlab.com/duplicity/duplicity/-/issues
Project-URL: Contact, https://lists.nongnu.org/mailman/listinfo/duplicity-talk
Project-URL: Documentation, http://duplicity.us
Project-URL: Repository, https://gitlab.com/duplicity/duplicity
Project-URL: Changelog, https://gitlab.com/duplicity/duplicity/-/blob/main/CHANGELOG.md
Classifier: Development Status :: 6 - Mature
Classifier: Environment :: Console
Classifier: Operating System :: MacOS
Classifier: Operating System :: POSIX
Classifier: Programming Language :: C
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: System :: Archiving :: Backup
Requires-Python: <3.15,>=3.10
Description-Content-Type: text/markdown
License-File: COPYING
License-File: AUTHORS.md
Requires-Dist: cryptography==43.0.3
Requires-Dist: fasteners>=0.19
Requires-Dist: httplib2
Requires-Dist: pysocks
Requires-Dist: python-gnupg
Requires-Dist: requests
Requires-Dist: requests-oauthlib
Requires-Dist: azure-storage-blob
Requires-Dist: b2sdk
Requires-Dist: boto3
Requires-Dist: botocore
Requires-Dist: boxsdk[jwt]
Requires-Dist: dropbox
Requires-Dist: gdata-python3
Requires-Dist: google-api-python-client
Requires-Dist: google-auth-oauthlib
Requires-Dist: jottalib
Requires-Dist: mediafire
Requires-Dist: megatools
Requires-Dist: paramiko
Requires-Dist: pexpect
Requires-Dist: pydrive2
Requires-Dist: pyrax
Requires-Dist: python-swiftclient
Dynamic: license-file

# REQUIREMENTS

The following should be installed by apt, yum, etc., depending on your OS.

NOTE: Some distros may have different names for these.
```
sudo apt-get update 
sudo apt-get install -y \
        build-essential \
        intltool \
        lftp \
        librsync-dev \
        libffi-dev \
        libssl-dev \
        openssl \
        par2 \
        python3-dev \
        python3-lxml \
        python3-pip \
        python3-venv \
        python3 \
        rclone \
        rsync \
        rdiff \
        tzdata
```

# INSTALLATION

Since Python 3.11 site package directories have been marked as **Externally Managed** and now require 
using `--break-system-packages` to install into them.  This means that a package like duplicity with
many packages must use a virtual environment, or venv, to install their packages.  Rather than going
through the manual process of producing a venv, activating it, installing duplicity, etc., we will be
using `pipx` from now on to install duplicity.  This way we get the same effect as a pip install, but
isolated in a venv.

To install follow instructions below.  Steps (1) and (2) are important.

## (1) Update packaging to current version
PyPA (Python Packaging Authority) has been making rapid changes to the way we install Python modules.  
To accomodate installing new packages on older Pythons prior to 3.11, it is necessary to upgrade 
packaging tools like this:
```shell
sudo python3 -m pip install --upgrade pip pipx
```
**NOTE: _Failure to upgrade will probably result in a failed install._  ←IMPORTANT!**  

To make sure the pipx dirs are on your path do:
```shell
sudo pipx --global ensurepath  # for all users
pipx ensurepath                # for single user
```

## (2) Uninstall Previous Version
If you have an existing duplicity on your path and it was not
installed by setup.py, pip, or pipx, you must uninstall it
using the same method by which it was installed.

You can tell if you have multiple instances by doing
```shell
which -a duplicity
```
and then use apt, yum, snap, or other command to remove them.

## (3) Install Using Pipx
Choose one of the following depending on whether you want to install for 
all users or the current user.  Use both if needed.

With `--global` duplicity will be installed in `/usr/local/bin/duplicity` 
and its many packages in `/opt/pipx/venvs/duplicity`.

Without `--global` duplicity will be installed in `~/.local/bin/duplicity` 
and its many packages in `~/.local/pipx/venvs/duplicity`.

### (3a) Normal Install

#### From Pipx (all users)
```shell
sudo pipx --global install duplicity[==version]
```

#### From Pipx (single user)
```shell
pipx install duplicity[==version]
```

### (3b) Suffixed Install
You can keep multiple versions of duplicity by supplying `--suffix=version`.

#### From Pipx (all users)
```shell
sudo pipx --global install --suffix=version duplicity[==version]
```

#### From Pipx (single user)
```shell
pipx install --suffix=version duplicity[==version]
```

# ARCHITECTURE

```mermaid
graph TD
    subgraph Interface
        Main["__main__.py (Entry Point)"]
    end

    subgraph Orchestration
        DupMain["dup_main.py (Orchestration)"]
    end

    subgraph Support_Config ["Support & Config"]
        CLI["cli_main.py (Argument Parsing)"]
        Config["config.py (Global Settings)"]
        LogUtil["log.py / util.py (Logging/Support)"]
    end

    subgraph Core_Logic ["Core Logic"]
        Selection["selection.py (File Selection)"]
        Backend["backend.py (Storage Layer)"]
        Errors["errors.py (Exception Mgmt)"]
    end

    subgraph Operation
        DiffDir["diffdir.py (Backup Logic)"]
        Backends["backends/ (Storage Drivers)"]
        PatchDir["patchdir.py (Restore Logic)"]
    end

    subgraph Engines_Metadata ["Engines & Metadata"]
        LibRsync["librsync.py (rsync delta)"]
        GPG["gpg.py (Encryption)"]
        Manifest["manifest.py (Metadata)"]
    end

    Main --> DupMain
    DupMain --> CLI
    DupMain --> Config
    DupMain --> LogUtil

    CLI --> Selection
    Config --> Backend
    LogUtil ~~~ Errors
    Errors -.-> LogUtil

    Selection --> DiffDir
    Backend --> Backends

    DiffDir --> Backends
    PatchDir --> Backends

    DiffDir --> LibRsync
    DiffDir --> GPG
    DiffDir --> Manifest

    PatchDir --> LibRsync
    PatchDir --> GPG
    PatchDir --> Manifest

    Backends --> GPG
```

# DEVELOPMENT

For more information on downloading duplicity's source code from the
code repository and developing for duplicity, see README-REPO.

For source docs: https://duplicity.readthedocs.io/

# HELP

For more information see the duplicity web site at:

  https://duplicity.us

  or at:

  https://duplicity.gitlab.io

or post to the mailing list at:

  https://lists.nongnu.org/mailman/listinfo/duplicity-talk

or post a new issue at:

  https://gitlab.com/duplicity/duplicity/-/issues
