Running Rapid Photo Downloader from Source with uv works great!

With the recent challenges around Python 3.14 and with Arch not yet having shipped Rapid Photo Downloader 9.37.x, I thought I would take a stab at just running from source.

I was pleasantly surprised that it runs out of the box with uv without doing anything special!

Of course, I already have the dependencies installed as they were needed for the main package, but I figure I would flag this to anyone who may find this useful :slight_smile:

git clone https://github.com/damonlynch/rapid-photo-downloader.git
cd rapid-photo-downloader
uv run rapid-photo-downloader

and I was in business again :slight_smile:

8 Likes

Good thinking @marcolussetti. Thanks for sharing your idea. Probably it helps that version 0.9.37 uses modern Python build tooling, as compared to 0.9.36.

Have you noticed any change in the program’s visual appearance with 0.9.37?

1 Like

I haven’t noticed any major differences, but the program is very predictable in my mind so I tend to go through the steps pretty quickly.

I think I see a minor font change for the most recent timeline entry?

I was running on hash 22cd1daa68815b5cb309d8a274e358be2aee34f5 (your merge from dl-branch-1)

I was thinking more of the application theme itself. What Linux desktop are you running (e.g. Gnome), and do you use dark mode?

Oh I see. I run on i3 – with admittedly not the most consistent theming.

Here is a side by side of 9.36 vs 9.37:

9.36:

9.37:

I do think it looks comparable to me.

I should add – due to corruption over time of my qt5 config, it’s a bit of a dark and not so dark mode in qt,

Probably not the best config to provide you with meaningful feedback on how the theming is working :slight_smile:

Aha. The new logic in the code to check for dark mode won’t work with your window manager. I’m glad the default appearance for the program in your system looks reasonable.

Tup, that worked for me as well. Did have to install vu and intltools first via the (Manjaro) repos but it was smooth sailing from there on in.

In my case (Manjaro) this didn’t work out of the box, I missed intltool dependency.

❯ uv run rapid-photo-downloader
  Ă— Failed to build `rapid-photo-downloader @ file:///home/bill/tools/rapid-photo-downloader`
  ├─▶ The build backend returned an error
  ╰─▶ Call to `hatchling.build.build_editable` failed (exit status: 1)

      [stderr]
      Traceback (most recent call last):
        File "<string>", line 11, in <module>
          wheel_filename = backend.build_editable("/home/bill/.cache/uv/builds-v0/.tmp6Gavsr", {}, None)
        File "/home/bill/.cache/uv/builds-v0/.tmpmcdqLK/lib/python3.14/site-packages/hatchling/build.py", line 83, in build_editable
          return os.path.basename(next(builder.build(directory=wheel_directory, versions=["editable"])))
                                  ~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/home/bill/.cache/uv/builds-v0/.tmpmcdqLK/lib/python3.14/site-packages/hatchling/builders/plugin/interface.py", line 149, in build
          build_hook.initialize(version, build_data)
          ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
        File "/home/bill/.cache/uv/builds-v0/.tmpmcdqLK/lib/python3.14/site-packages/hatch_gettext/plugin.py", line 371, in initialize
          self.do_work(build_data)
          ~~~~~~~~~~~~^^^^^^^^^^^^
        File "/home/bill/.cache/uv/builds-v0/.tmpmcdqLK/lib/python3.14/site-packages/hatch_gettext/plugin.py", line 345, in do_work
          self.translate_files()
          ~~~~~~~~~~~~~~~~~~~~^^
        File "/home/bill/.cache/uv/builds-v0/.tmpmcdqLK/lib/python3.14/site-packages/hatch_gettext/plugin.py", line 302, in translate_files
          self._translate_file(self._po_dir, in_file, path_to_translate)
          ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/home/bill/.cache/uv/builds-v0/.tmpmcdqLK/lib/python3.14/site-packages/hatch_gettext/plugin.py", line 72, in _translate_file
          process = subprocess.run(cmd, text=True, capture_output=True)
        File "/usr/lib/python3.14/subprocess.py", line 555, in run
          with Popen(*popenargs, **kwargs) as process:
               ~~~~~^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/lib/python3.14/subprocess.py", line 1039, in __init__
          self._execute_child(args, executable, preexec_fn, close_fds,
          ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                              pass_fds, cwd, env,
                              ^^^^^^^^^^^^^^^^^^^
          ...<5 lines>...
                              gid, gids, uid, umask,
                              ^^^^^^^^^^^^^^^^^^^^^^
                              start_new_session, process_group)
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/lib/python3.14/subprocess.py", line 1990, in _execute_child
          raise child_exception_type(errno_num, err_msg, err_filename)
      FileNotFoundError: [Errno 2] No such file or directory: 'intltool-merge'


hint: Build failures usually indicate a problem with the package or the build environment%

In case someone else has this issue, I solved by installing intltool.
And even in more detail, in my case, I created a conda environment to do this to not affect at system level (intltool is only needed at build time).

cd rapid-photo-downloader
conda create -n rpd_temp intltool

…accept, install, etc.

conda activate rpd_temp
uv run rapid-photo-downloader

et voilĂ .

In my case rapid-photo-downloader started this way lamented a lack of exiftool, no idea why (I have it at system level).
I’ve installed it explicity in the conda environment and then it worked. :person_shrugging:

1 Like

That makes sense – as a small note, you don’t actually need the conda environment because uv creates its own environment underneath, so it does not touch the system’s python :slight_smile:

Not true, this is the point.
intltools it’s not a Python package, it needs to be found among the executables.
So either you install it at system level, or you make it available to uv in another way, e.g. a conda env.
conda envs are not limited to Python packages, that’s why they are so handy (I use them for instance to use different versions of gcc).