LomaxOnTheRun
LomaxOnTheRun

Reputation: 702

Dockerized Django tests only look at first $PATH location

I'm running a Django test suite in a Docker container, and some of these tests use a program I've had to apt-get install (wkhtmltopdf). Now I can see that it's been installed correctly:

$ wkhtmltopdf --version
wkhtmltopdf 0.12.5

but for some reason the Django test can't use it. The installation location is definitely on my $PATH (third to last element):

$ echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
$ find / -name wkhtmltopdf
/usr/bin/wkhtmltopdf

However when I run tests I get a stack trace ending in:

OSError: No wkhtmltopdf executable found: "/usr/local/bin/wkhtmltopdf"
If this file exists please check that this process can read it. Otherwise please install wkhtmltopdf - https://github.com/JazzCore/python-pdfkit/wiki/Installing-wkhtmltopdf

Now it's absolutely correct that there is no /usr/local/bin/wkhtmltopdf, because it got installed elsewhere (/usr/bin/) but both those locations are on $PATH.

I've tried moving /usr/bin/ to the start of $PATH, but I then get the error:

Traceback (most recent call last):
  File "./manage.py", line 8, in <module>
    from django.core.management import execute_from_command_line
ImportError: No module named django.core.management

presumably because it's now looking in /usr/bin/ for django when it's actually in usr/local/bin/, which is no longer the first location on $PATH.

I'm not sure if the problem is a Docker one, a Django one, a testing one, or just me misunderstanding one or more things going on here.

Upvotes: 0

Views: 430

Answers (1)

LomaxOnTheRun
LomaxOnTheRun

Reputation: 702

So it turns out that the project is using pdfkit as a wrapper for wkhtmltopdf, which includes setting the wkhtmltopdf path directly:

config = pdfkit.configuration(wkhtmltopdf=settings.WKHTMLTOPDF_BIN)

which after a quick look at the Django settings file was set to:

WKHTMLTOPDF_BIN = '/usr/local/bin/wkhtmltopdf'

Mystery solved! The fix in this case was to simply set it to the actual path desired (/usr/bin/wkhtmltopdf).

Upvotes: 2

Related Questions