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
)。
我 运行 在 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
)。