Dockerized Django 测试只查看第一个 $PATH 位置

Dockerized Django tests only look at first $PATH location

我 运行 在 Docker 容器中安装了一个 Django 测试套件,其中一些测试使用了我必须 apt-get install (wkhtmltopdf).现在我可以看到它已经正确安装了:

$ wkhtmltopdf --version
wkhtmltopdf 0.12.5

但由于某些原因 Django 测试无法使用它。安装位置肯定在我的$PATH(倒数第三个元素):

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

然而,当我 运行 测试时,我得到一个以以下结尾的堆栈跟踪:

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

现在没有 /usr/local/bin/wkhtmltopdf 是绝对正确的,因为它安装在别处 (/usr/bin/),但这两个位置都在 $PATH.

我试过将 /usr/bin/ 移动到 $PATH 的开头,但随后出现错误:

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

大概是因为它现在在 /usr/bin/ 中寻找 django,而实际上它在 usr/local/bin/ 中,这不再是 $PATH 上的第一个位置。

我不确定问题是 Docker 问题、Django 问题、测试问题,还是我误解了这里发生的一件事或多件事。

所以事实证明该项目正在使用 pdfkit 作为 wkhtmltopdf 的包装器,其中包括直接设置 wkhtmltopdf 路径:

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

在快速查看 Django 设置文件后设置为:

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

谜底揭晓!这种情况下的解决方法是简单地将其设置为所需的实际路径 (/usr/bin/wkhtmltopdf)。