henrysher / duplicity

mirror of duplicity: https://code.launchpad.net/duplicity
81 stars 13 forks source link

Trouble installing duplicity on OSX Mojave: Missing librsync.h #19

Open MisanthropicBit opened 5 years ago

MisanthropicBit commented 5 years ago

I'm having trouble installing duplicity on Mac OSX Mojave 10.14.5 via pip using Python 2.7.16 (via pyenv). Specifically, I get the following output from running pip2 install duplicity:

Collecting duplicity
  Using cached https://files.pythonhosted.org/packages/eb/3f/1e8cd24fc23dc6cd8d3f86811c0c5b07da59fc55f881838b10f141cd589e/duplicity-0.7.14.tar.gz
Requirement already satisfied: fasteners in /Users/albo/.pyenv/versions/2.7.16/lib/python2.7/site-packages (from duplicity) (0.15)
Requirement already satisfied: monotonic>=0.1 in /Users/albo/.pyenv/versions/2.7.16/lib/python2.7/site-packages (from fasteners->duplicity) (1.5)
Requirement already satisfied: six in /Users/albo/.pyenv/versions/2.7.16/lib/python2.7/site-packages (from fasteners->duplicity) (1.12.0)
Installing collected packages: duplicity
  Running setup.py install for duplicity ... error
    ERROR: Complete output from command /Users/albo/.pyenv/versions/2.7.16/bin/python2.7 -u -c 'import setuptools, tokenize;__file__='"'"'/private/var/folders/76/6lq0sxzd24b7d5573nxfyy600000gr/T/pip-install-52AhpF/duplicity/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/76/6lq0sxzd24b7d5573nxfyy600000gr/T/pip-record-l4gMJE/install-record.txt --single-version-externally-managed --compile:
    ERROR: running install
    running build
    running build_py
    creating build
    creating build/lib.macosx-10.14-x86_64-2.7
    creating build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/tempdir.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/dup_threading.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/backend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/manifest.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/log.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/util.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/globals.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/globmatch.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/__init__.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/diffdir.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/commandline.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/librsync.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/dup_time.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/compilec.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/gpg.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/file_naming.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/collections.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/asyncscheduler.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/gpginterface.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/robust.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/statistics.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/patchdir.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/errors.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/selection.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/progress.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/dup_temp.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/tarfile.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/lazy.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/filechunkio.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/path.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    copying duplicity/cached_ops.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity
    creating build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/megabackend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/acdclibackend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/pydrivebackend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/imapbackend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/ssh_pexpect_backend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/par2backend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/multibackend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/swiftbackend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/botobackend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/tahoebackend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/giobackend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/_boto_multi.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/localbackend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/sxbackend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/_cf_pyrax.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/__init__.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/mediafirebackend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/ncftpbackend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/gdocsbackend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/cfbackend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/_cf_cloudfiles.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/_boto_single.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/ssh_paramiko_backend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/hsibackend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/onedrivebackend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/hubicbackend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/dpbxbackend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/b2backend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/azurebackend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/rsyncbackend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/lftpbackend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    copying duplicity/backends/webdavbackend.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends
    creating build/lib.macosx-10.14-x86_64-2.7/duplicity/backends/pyrax_identity
    copying duplicity/backends/pyrax_identity/__init__.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends/pyrax_identity
    copying duplicity/backends/pyrax_identity/hubic.py -> build/lib.macosx-10.14-x86_64-2.7/duplicity/backends/pyrax_identity
    creating build/lib.macosx-10.14-x86_64-2.7/testing
    copying testing/test_code.py -> build/lib.macosx-10.14-x86_64-2.7/testing
    copying testing/__init__.py -> build/lib.macosx-10.14-x86_64-2.7/testing
    creating build/lib.macosx-10.14-x86_64-2.7/testing/functional
    copying testing/functional/test_verify.py -> build/lib.macosx-10.14-x86_64-2.7/testing/functional
    copying testing/functional/test_cleanup.py -> build/lib.macosx-10.14-x86_64-2.7/testing/functional
    copying testing/functional/__init__.py -> build/lib.macosx-10.14-x86_64-2.7/testing/functional
    copying testing/functional/test_selection.py -> build/lib.macosx-10.14-x86_64-2.7/testing/functional
    copying testing/functional/test_log.py -> build/lib.macosx-10.14-x86_64-2.7/testing/functional
    copying testing/functional/test_final.py -> build/lib.macosx-10.14-x86_64-2.7/testing/functional
    copying testing/functional/test_badupload.py -> build/lib.macosx-10.14-x86_64-2.7/testing/functional
    copying testing/functional/test_restart.py -> build/lib.macosx-10.14-x86_64-2.7/testing/functional
    copying testing/functional/test_rdiffdir.py -> build/lib.macosx-10.14-x86_64-2.7/testing/functional
    creating build/lib.macosx-10.14-x86_64-2.7/testing/overrides
    copying testing/overrides/gettext.py -> build/lib.macosx-10.14-x86_64-2.7/testing/overrides
    copying testing/overrides/__init__.py -> build/lib.macosx-10.14-x86_64-2.7/testing/overrides
    creating build/lib.macosx-10.14-x86_64-2.7/testing/unit
    copying testing/unit/test_backend.py -> build/lib.macosx-10.14-x86_64-2.7/testing/unit
    copying testing/unit/test_statistics.py -> build/lib.macosx-10.14-x86_64-2.7/testing/unit
    copying testing/unit/test_tempdir.py -> build/lib.macosx-10.14-x86_64-2.7/testing/unit
    copying testing/unit/test_dup_time.py -> build/lib.macosx-10.14-x86_64-2.7/testing/unit
    copying testing/unit/test_diffdir.py -> build/lib.macosx-10.14-x86_64-2.7/testing/unit
    copying testing/unit/test_gpginterface.py -> build/lib.macosx-10.14-x86_64-2.7/testing/unit
    copying testing/unit/__init__.py -> build/lib.macosx-10.14-x86_64-2.7/testing/unit
    copying testing/unit/test_selection.py -> build/lib.macosx-10.14-x86_64-2.7/testing/unit
    copying testing/unit/test_manifest.py -> build/lib.macosx-10.14-x86_64-2.7/testing/unit
    copying testing/unit/test_backend_instance.py -> build/lib.macosx-10.14-x86_64-2.7/testing/unit
    copying testing/unit/test_patchdir.py -> build/lib.macosx-10.14-x86_64-2.7/testing/unit
    copying testing/unit/test_dup_temp.py -> build/lib.macosx-10.14-x86_64-2.7/testing/unit
    copying testing/unit/test_gpg.py -> build/lib.macosx-10.14-x86_64-2.7/testing/unit
    copying testing/unit/test_file_naming.py -> build/lib.macosx-10.14-x86_64-2.7/testing/unit
    copying testing/unit/test_path.py -> build/lib.macosx-10.14-x86_64-2.7/testing/unit
    copying testing/unit/test_collections.py -> build/lib.macosx-10.14-x86_64-2.7/testing/unit
    copying testing/unit/test_lazy.py -> build/lib.macosx-10.14-x86_64-2.7/testing/unit
    copying testing/unit/test_globmatch.py -> build/lib.macosx-10.14-x86_64-2.7/testing/unit
    copying testing/unit/test_tarfile.py -> build/lib.macosx-10.14-x86_64-2.7/testing/unit
    running build_ext
    building 'duplicity._librsync' extension
    creating build/temp.macosx-10.14-x86_64-2.7
    creating build/temp.macosx-10.14-x86_64-2.7/duplicity
    clang -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Users/albo/.pyenv/versions/2.7.16/include/python2.7 -c duplicity/_librsyncmodule.c -o build/temp.macosx-10.14-x86_64-2.7/duplicity/_librsyncmodule.o
    duplicity/_librsyncmodule.c:27:10: fatal error: 'librsync.h' file not found
    #include <librsync.h>
             ^~~~~~~~~~~~
    1 error generated.
    error: command 'clang' failed with exit status 1
    ----------------------------------------
ERROR: Command "/Users/albo/.pyenv/versions/2.7.16/bin/python2.7 -u -c 'import setuptools, tokenize;__file__='"'"'/private/var/folders/76/6lq0sxzd24b7d5573nxfyy600000gr/T/pip-install-52AhpF/duplicity/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/76/6lq0sxzd24b7d5573nxfyy600000gr/T/pip-record-l4gMJE/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /private/var/folders/76/6lq0sxzd24b7d5573nxfyy600000gr/T/pip-install-52AhpF/duplicity/

clang complains that it cannot find the librsync.h file. Although the rsync executable is available on OSX, the sources do not seem to be.

I then tried downloading the rsync source files myself and setting LIBRSYNC_DIR when running pip2 but duplicity assumes that the include files are found in $LIBRSYNC_DIR/include which is not the case for the librsync sources on github or sourceforge.

brew is not an option for me on this particular machine.

Is there another way of installing duplicity on OSX short of modifying the setup.py script and running python2 setup.py install, or am I missing something else? I could also simply create the directory and move the header into it (and do the same with $LIBRSYNC_DIR/lib) but there must be a better way :)