3d форум по Blender

Blender => Вопросы от новичков => Тема начата: ice99 от 08 Декабрь 2017, 20:20:18

Название: Как запустить сккрипт Python на web-сервере?
Отправлено: ice99 от 08 Декабрь 2017, 20:20:18
Написал маленький скрипт (конвертация модели).
Скрипт отличнно работает на Win7 x64.
Запускаю его из командной строки
Код
C:\SOFT\blender-2.79-windows64\blender.exe --debug-all --background --python myscript.py
Скрипт берет файл одного типа, и создаёт файл другого типа.
Работает как часы.
Возникла необходимость разместить эту возможность на веб-сервере в интернете.
т.е. пользователь грузит свой формат, а на выходе получает другой.
Загрузкf, обработка php - это понятно. Вопросы следующие:
1. Какую версию Blender-а использовать (Линуксовую?)
2. Как будет выглядить синтаксис запуска моего скрипта?
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: Николай Николаев от 08 Декабрь 2017, 23:47:36
... суть же не в версии, какая у тебя стоит серверная ОС? ...
https://stackoverflow.com/questions/23563809/php-running-a-python-script-using-blender-from-a-php-project-using-cmd-commands
https://blender.stackexchange.com/questions/40488/running-a-blender-script-on-linux-hosting
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: ice99 от 08 Декабрь 2017, 23:59:09
... суть же не в версии, какая у тебя стоит серверная ОС? ...
https://stackoverflow.com/questions/23563809/php-running-a-python-script-using-blender-from-a-php-project-using-cmd-commands
https://blender.stackexchange.com/questions/40488/running-a-blender-script-on-linux-hosting

Может я неправильно сформулировал.
Я хочу организовать это на хостинге (допустим beget). т.е. система "не моя". Так вот какими модулями должен обладать хостинг, чтобы я мог выполнить свою задачу? Наличие Python-а, php понятно. А сама платформа (Linux)?
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: Николай Николаев от 09 Декабрь 2017, 00:12:51
... мало вероятно, чтобы дешевый план давал бы такие возможности ...
... если система не твоя, то лучше связаться с сапортом и задать её прямой вопрос, суть - не все йогурты одинаково полезны ...
... и опять же - чтобы запустить blender на сервере нужно еще бибилиотечное окружение даже если он не будет использовать GUI ...
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: ice99 от 09 Декабрь 2017, 17:29:54
Привожу ниже переписку с суппортом
---------------------
Антон Борисович
Служба технической поддержки

12:59
Здравствуйте.
Насколько я вижу по документации blender, в его зависимости входит OpenGL. Эта графическая библиотека не установлена у нас по умолчанию, однако и установить её не представляется возможным - для этого необходим соответствующий графический чип, который по умолчанию не установлен ни на одном из наших серверов.
К сожалению, реализовать ваш проект на нашем хостинге не удастся.
---------------
Я
Спасибо, большое за консультацию, но хотел бы заметить, что “выполнение скрипта python через blender” - НЕ ТРЕБУЕТ запуска GUI-оболочки Blender-а, и происходит в КОНСОЛЬНОМ режиме. Насколько я понимаю OpenGL нужен для визуального отображения GUI (т.к. это трехмерный редактор).
А в консольном режиме OpenGL не нужна (основное приложение blender не запускает окон, и работает только с о своими python скриптами. ).
Я бы даже поставил вопрос по-другому.
ВОЗМОЖНО ЛИ ЗАПУСТИТЬ LINUX ПРИЛОЖЕНИЕ НА ВАШЕМ ХОСТИНГЕ?
Понимаю, что речь о Blender, но я на 99% уверен что OpenGL не будет проблемой, т.к. ни одного окна создаваться не будет.
------------------
Антон Борисович
Служба технической поддержки

14:03
Тот факт, что библиотека является графической, не означает, что она используется для отрисовки GUI, можете убедиться в этом на примере утилиты hashcat.
Часто, она используется только для доступа к вычислениям на графическом устройстве, которые в отдельных случаях (как например рендеринг 3D-модели, или майнинг) происходят на несколько порядков быстрее, чем на CPU.
ВОЗМОЖНО ЛИ ЗАПУСТИТЬ LINUX ПРИЛОЖЕНИЕ НА ВАШЕМ ХОСТИНГЕ?
У любого linux-приложения есть зависимости, и ответ на ваш вопрос будет меняться от приложения к приложению.
В любом случае, если вы считаете, что приложение будет работать корректно, вы можете скачать бинарный файл (или исходный код) на домашней странице blender и попробовать запустить (скомпилировать в виртуальном окружении Docker) его.
------------



т.е. меня послали в направлении Docker(он есть на beget.ru) - контейнеризация приложений.
попутно нашел задокеренный Blender https://hub.docker.com/r/ikester/blender/

Пробую разобраться с новой темой (голова кругом).

Есть у кого реальный опыт работы с Докером?
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: Николай Николаев от 09 Декабрь 2017, 19:11:53
>> К сожалению, реализовать ваш проект на нашем хостинге не удастся.
>> Пробую разобраться с новой темой (голова кругом).
... войди в положение хостера - для этого поставь у себя  виртуальную машину, установи в ней консольный линукс без DE и WM, и попытайся в него залить blender - стандартная сборка будет ругать на отсутствие кучи библиотек ...
... найди эти библиотеки и попытайся предоставить путь к ним для blender, возможно после этого он запустится в консольном режиме с этим библиотечным окружением, но не факт, что без сегфайлта ...
... само по себе твоё желание оправдано, и возможно есть реализации, пинай эту тему дальше, решение должно быть ...
... если у меня что-нибудь появится, сообщу ...
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: ice99 от 09 Декабрь 2017, 19:17:09
... войди в положение хостера - для этого поставь у себя  виртуальную машину, установи в ней консольный линукс без DE и WM, и попытайся в него залить blender -
Когда я коннекчусь через SSH, я получаю следующее приветствие:
Welcome to Ubuntu 12.04 LTS (GNU/Linux 4.9.41-0-beget-acl x86_64)
Значит ли это, что я должен установить себе ubuntu 12.04, а не "консольный линукс без DE и WM"?
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: Николай Николаев от 09 Декабрь 2017, 19:42:06
>> Когда я коннекчусь через SSH, я получаю следующее приветствие:
... а ты можешь по ssh загнать туда архив и распаковать его там? ...
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: ice99 от 09 Декабрь 2017, 20:00:46
... а ты можешь по ssh загнать туда архив и распаковать его там? ...
как раз закачиваю. еле ползет.
Но что значит "распаковать"? Я скачал Линуксовую версию, распаковал архив на Винде, и сейчас закачиваю содержимое архива. По идее оно не требует распаковки, а только запуск.
Нужно как-то "установить" закачанные файлы?
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: Николай Николаев от 09 Декабрь 2017, 20:08:47
>> Нужно как-то "установить" закачанные файлы?
... нет, но blender не запустится поскольку нет библиотек (в этом основная проблема) ...

>> В любом случае, если вы считаете, что приложение будет работать корректно, вы можете скачать бинарный файл (или исходный код) на домашней странице blender и попробовать запустить (скомпилировать в виртуальном окружении Docker) его.
... про докер есть в вики на оф. сайте blender  https://wiki.blender.org/index.php/User:Jbakker/Blender_docker ...
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: ice99 от 09 Декабрь 2017, 21:03:50
>> Нужно как-то "установить" закачанные файлы?
... нет, но blender не запустится поскольку нет библиотек (в этом основная проблема) ...
а как отмониторить нехватающие библиотеки?

/go.php?url=aHR0cHM6Ly93aWtpLmJsZW5kZXIub3JnL2luZGV4LnBocC9Vc2VyOkpiYWtrZXIvQmxlbmRlcl9kb2NrZXI=]https://wiki.blender.org/index.php/User:Jbakker/Blender_docker[/url] ...
Да я нашел вроде готовые образы, только как ими пользоваться?
https://hub.docker.com/r/ikester/blender/
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: Николай Николаев от 09 Декабрь 2017, 21:17:06
>> а как отмониторить нехватающие библиотеки?
... "отмонтировать" никак нельзя (по-хорошему) ...
... можно их залить и указать в окружении LIBRARY_PATH ...

>> Да я нашел вроде готовые образы, только как ими пользоваться?
... хз ...
... попробую почитать об этом на следующей неделе ...
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: Николай Николаев от 10 Декабрь 2017, 06:15:49
про docker
https://docs.docker.com/get-started/
https://proglib.io/p/docker/
http://cyber01.ru/manuals/ustanovka-i-ispolzovanie-docker-v-ubuntu-15-04/

про запуск blender в docker
https://wiki.blender.org/index.php/User_talk:Jbakker/Blender_docker
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: ice99 от 10 Декабрь 2017, 14:33:47
Спасибо за ссылки.
Но по обоим идет запуск Blendera с GUI. А мне это не надо.
Я же вроде как консольно пытаюсь его запускать.

Скачал последнюю Ubuntu Server 16.04
Установил на Vmware.
Настроил SSH доступ, SFTP.
Установил LAMP (не настраивал особо).
Поставил Docker.

Подошел к Blender-у.
Не пойму, мне надо его ставить "как обычно", или ставить Docker, и ставить Blender контейнером?
Если как сказал саппорт "На шаред хостинге Docker-a нет, вам нужен VDS\VPS - отдельный сервер", то смысл заморачиваться с Docker-ом, если я на VDS и так смогу хоть атомную войну устроить? Мне пока непонятен этот момент.
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: Николай Николаев от 10 Декабрь 2017, 15:48:01
>> В любом случае, если вы считаете, что приложение будет работать корректно, вы можете скачать бинарный файл (или исходный код) на домашней странице blender и попробовать запустить (скомпилировать в виртуальном окружении Docker) его.
... насколько понял и судя из слов саппорта - это он тебе посоветовал docker, а если у тебя уже есть docker image, то можешь создать из него контейнер на любом сервере, где установлен docker ...
... еще раз уточни у саппорта по docker ...
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: ice99 от 10 Декабрь 2017, 16:59:16
Так. Blender 2.79 поставил на сервак 16.04.
Скрипт из командной строки - отрабатывает, результат есть.
Теперь нужно немножко подправить конфиг самого Blender-а. А именно, добавить свой путь в
User preferences - > File ->Scripts

Поскольку интерфейс не запускается, есть 2 варианта
1. Править текстовый конфиг
2. как-то через командную строку

Кто-нибудь знает где конфиг путей у Blendera ?
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: Николай Николаев от 10 Декабрь 2017, 17:09:28
... смотри доку blender cli или blender --help в части переменных окружения ($BLENDER_USER_SCRIPTS и $BLENDER_SYSTEM_SCRIPTS) https://docs.blender.org/manual/en/dev/advanced/command_line/arguments.html ...
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: ice99 от 10 Декабрь 2017, 17:22:07
... смотри доку blender cli или blender --help в части переменных окружения ($BLENDER_USER_SCRIPTS и $BLENDER_SYSTEM_SCRIPTS) https://docs.blender.org/manual/en/dev/advanced/command_line/arguments.html ...

Так в том то и дело, что System-scripts можно через консоль изменить, а user-scripts нет

Код
--env-system-datafiles
    Set the BLENDER_SYSTEM_DATAFILES environment variable.
--env-system-scripts
    Set the BLENDER_SYSTEM_SCRIPTS environment variable.
--env-system-python
    Set the BLENDER_SYSTEM_PYTHON environment variable.
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: Николай Николаев от 10 Декабрь 2017, 17:40:34
... тогда смотри startup.blend в папке пользователя ...
... но ...
... это ключи запуска ...
--env-system-datafiles --env-system-scripts --env-system-python
... а это переменные окружения ...
$BLENDER_USER_SCRIPTS
$BLENDER_SYSTEM_SCRIPTS

... переменные окружения устанавливаются до запуска blender
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: ice99 от 10 Декабрь 2017, 18:01:56
Startup.blend не нашел поиском. На винде он есть, но там пути то другие.
а сервак консольный, GUI не открыть для его создания

нашел следы /usr/share/blender/2.79
и
/usr/bin/blender - это 1кб файл со следующим  содержанием

Код
#!/bin/sh

if [ -z "$OMP_NUM_THREADS" ]; then
    NUM_CORES=`grep -m1 '^cpu cores' /proc/cpuinfo | tr -dc 0-9`

    if [ "$NUM_CORES" ]; then
export OMP_NUM_THREADS=$NUM_CORES
    fi
fi

export LD_LIBRARY_PATH=/usr/lib/blender/ffmpeg/2.2/lib:${LD_LIBRARY_PATH}

exec $BLENDER_WRAPPER /usr/lib/blender/blender -P /usr/lib/blender/reset_excepthook.py "$@"

Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: Николай Николаев от 10 Декабрь 2017, 19:00:39
... у тебя уже установлен докер? ты где проводишь проводить эксперименты? ...
... может попробовать скриптом установить все переменные которые тебе требуются ...

Код: python
#myscript.py

import bpy
from bpy import context
print("hello!")
path = "/somepath"
context.user_preferences.filepaths.script_directory=path
print(context.user_preferences.filepaths.script_directory)

... а скрипт запускать ...
Код: bash
exec blender --background --python myscript.py

ps
... и наверное нужно startup.blend смотреть, а userpref.blend ...
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: ice99 от 10 Декабрь 2017, 19:46:23
... у тебя уже установлен докер? ты где проводишь проводить эксперименты? ...

Я писал выше, что Docker получается не нужен, т.к. у меня полный контроль над своей Ubuntu 16.04 Server
Установил рядом Ubuntu 16.04 Desktop, чтобы в GUI оболочке Blender всё настроить, а потом Ctrl+C, Ctrl+V на серверную систему. Говорят будет работать.
 
Но даже если получится, думаю и образ с Docker-ом сделать, чтобы потом такой свистопляски не было.

#myscript.py

import bpy
from bpy import context
print("hello!")
path = "/somepath"
context.user_preferences.filepaths.script_directory=path
print(context.user_preferences.filepaths.script_directory)

спасибо, поробую и такой вариант.
однако
видимо делается "environment file "
https://wiki.blender.org/index.php/Dev:2.5/Source/Installation/EnvironmentVariables
Правда это для версии 2.5

exec blender --background --python myscript.py
так так, а почему exec ? Это же не php-запуск. Хотя, конечно триггерить я это буду через php потом. Пока из консоли балуюсь.
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: Николай Николаев от 10 Декабрь 2017, 19:53:40
>> т.к. у меня полный контроль над своей Ubuntu 16.04 Server
... в Сети? ...

>> так так, а почему exec ? Это же не php-запуск. Хотя, конечно триггерить я это буду через php потом. Пока из консоли балуюсь.
... это в контексте консоли моей системы (gentoo), у тебя возможно будет другое ...
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: ice99 от 10 Декабрь 2017, 20:06:10
>> т.к. у меня полный контроль над своей Ubuntu 16.04 Server
... в Сети? ...
да нет конечно, поставил на виртуалку. Но если единственный способ (как мне сказал хостер) это VDS, то это и есть полный контроль над окружением. По идее и Docker там не нужен.
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: Николай Николаев от 10 Декабрь 2017, 20:25:16
>> Но если единственный способ (как мне сказал хостер) это VDS, то это и есть полный контроль над окружением.
... а зачем тебе там blender? можешь прокомментировать если это не объект оборонного значения :) ...
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: ice99 от 10 Декабрь 2017, 20:39:41
>> Но если единственный способ (как мне сказал хостер) это VDS, то это и есть полный контроль над окружением.
... а зачем тебе там blender? можешь прокомментировать если это не объект оборонного значения :) ...

нет. Пользователь на сайте загружает модель в формате А, а скачивает модель в формате В.
Blender как конвертер.
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: Николай Николаев от 10 Декабрь 2017, 20:41:17
... почему пользователь не может сделать это у себя на ПК? ...
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: ice99 от 10 Декабрь 2017, 20:44:39
... почему пользователь не может сделать это у себя на ПК? ...
Ну, скрипт может/будет добавлять свои "плюшки"б помимо простой конвертации.
Кстати, код
Код
#myscript.py

import bpy
from bpy import context
print("hello!")
path = "/somepath"
context.user_preferences.filepaths.script_directory=path
print(context.user_preferences.filepaths.script_directory)
почему  то не срабатывает. точнее ничего не выводит в консоль
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: Николай Николаев от 10 Декабрь 2017, 20:58:14
>> почему  то не срабатывает. точнее ничего не выводит в консоль
... покажи как запускаешь ...

>> Ну, скрипт может/будет добавлять свои "плюшки"б помимо простой конвертации.
... то есть ты не хочешь их показывать общественности? ...

Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: ice99 от 10 Декабрь 2017, 21:09:03
>> почему  то не срабатывает. точнее ничего не выводит в консоль
... покажи как запускаешь ...

прикрепил скрин. набираю в блендере и запускаю
upd.... виноват. получилось. если набирать из терминала ubuntu, то работает

>> Ну, скрипт может/будет добавлять свои "плюшки"б помимо простой конвертации.
... то есть ты не хочешь их показывать общественности? ...
Я пока не уверен в конечной цели, но в любом случае, взять модель (скриптом), обработать и вернуть пользователю это хороший функционал.
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: Николай Николаев от 10 Декабрь 2017, 21:18:07
>> Я пока не уверен в конечной цели, но в любом случае, взять модель (скриптом), обработать и вернуть пользователю это хороший функционал.
... это хороший функционал для ресурсоёмкой операции и она на сервере будет выполняться быстрее и дешевле чем на локальном ПК пользователя,  иначе будет не очень интересно ...
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: Николай Николаев от 10 Декабрь 2017, 22:23:14
... еще сделаю тематическую связку по содержанию "использования blender как модуля для python" https://wiki.blender.org/index.php/User%3AIdeasman42/BlenderAsPyModule ...
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: ice99 от 10 Декабрь 2017, 23:28:42
... еще сделаю тематическую связку по содержанию "использования blender как модуля для python" https://wiki.blender.org/index.php/User%3AIdeasman42/BlenderAsPyModule ...
Не понял, кто сделает?
Какая в этом практическая польза?
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: Николай Николаев от 11 Декабрь 2017, 03:54:07
>> Не понял, кто сделает? Какая в этом практическая польза?
... не бери в голову, это отступление от темы, но blender можно использовать как модуль для python, то есть сам blender не запускается, а запускается скрирт на python, который использует функции blender как библиотечные ...
Цитировать
This allows 'bpy' to be imported from python or other applications/IDE's which embed python, eg:
python -c "import bpy ; bpy.ops.render.render(write_still=True)" 
This runs in background mode and has similar restrictions to running a script:
blender --background --python test.py 
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: ice99 от 11 Декабрь 2017, 12:50:55
Так. Ну вроде как победил. Подбросил конфиг-файл из установленного на GUI Ubuntu в созданную папку .config/blender/2.79

Теперь всё подхватывается, и делается как надо.
На самом деле, думаю это можно было и не делать.
По сути 2 задачи, которые я пытался выполнить (В GUI) это
1. Указание пути к скриптам
под конец понял, что это делается так
Код
import bpy
from bpy import context
path = "/somepath"
context.user_preferences.filepaths.script_directory=path
print(context.user_preferences.filepaths.script_directory)
2. Подключение плагина
код не помню, но при включении галочки этого плагина - всплывает питоновская подсказка с командой его подключения.
т.е. GUI-шный вариант (через файл файл в .config  userprefs.blend) для настройки вроде как не нужен. В консоли запускается нулячий Blender с заданнной коммандной строкой, которая и формирует требуемую конфигурацию.

Единственный момент, который мне непонятен это:
На сервер я установил Blender из репозитория (который разбросался по нескольким папкам в системе).
На офсайте я могу скачать tar-архив и распаковав его запустить Blender без всяких репозиториев (что я и сделал на GUI-Ubuntu).
На серверном Ubuntu я не пробовал запускать "распакованный".

Вопрос в том, "зачем парится со скачивания с репозитория, если можно просто скопировать с офсайта?".
Типа если у меня голый Линух - то репозиторная версия точно проинсталит нужные библиотеки, а офсайтная подразумевает что у меня все нужные либы есть по умолчанию?
Название: Re: Как запустить сккрипт Python на web-сервере?
Отправлено: Николай Николаев от 11 Декабрь 2017, 16:32:17
>> Вопрос в том, "зачем парится со скачивания с репозитория, если можно просто скопировать с офсайта?".
... пробуй сначала архив с офсайта, по сути там portable ...