Я пытаюсь экспортировать график Боке в изображение.Для этого я использую метод export_png
, который использует PhantomJS и Selenium под ним.Однако я получил RuntimeError
RuntimeError: PhantomJS is not present in PATH or BOKEH_PHANTOMJS_PATH.
Try "conda install phantomjs" or "npm install -g phantomjs-prebuilt"
Это поведение можно воспроизвести:
Записная книжка
import shutil
shutil.which('phantomjs') or 'not found'
# --> "not found"
С IPython втот же virtualenv
import shutil
shutil.which('phantomjs') or 'not found'
# --> "/home/<user>/miniconda/envs/p36/bin/phantomjs"
[Редактировать]
Сервер ноутбука работает как служба в Linux (Ubuntu).Я думаю, что проблема заключается в том, что, когда я вручную запускаю сервер ноутбука, путь phantomJS
хорошо обнаруживается на ноутбуке.Вот подробный файл systemd:
[Unit]
Description=Jupyter Notebook
After=multi-user.target network.target
[Service]
User=<myuser>
Group=<mygroup>
EnvironmentFile=/etc/environment
Type=idle
Restart=always
RestartSec=3
ExecStart=/home/<user>/miniconda3/envs/tensorflow/bin/jupyter-notebook --no-browser --notebook-dir="/home/<user>/src"
[Install]
WantedBy=multi-user.target
[Решение]
Проблема скорее системная, чем проблема Python: $PATH
Используется переменная средыодин из пользователей root, а не указанный пользователь.Я не нашел четкого способа загрузить файл .bashrc
перед запуском скрипта сервиса.Тогда было решено использовать файл среды, в котором я объявил переменную $PATH
так же, как это делается в файле .bashrc
.После этого все работает как шарм.