Сбой ядра Jupyter SAS внутри контейнера Docker

#docker #jupyter-notebook #sas #python-3.9 #saspy

Вопрос:

По какой-то причине я не могу запускать записные книжки SAS внутри контейнера Jupyter Docker. Я могу запускать код SAS внутри записных книжек Python через saspy, но ядро SAS продолжает выдавать мне ошибки.

Я использую изображение jupyter/pyspark-ноутбук:ноутбук-6.4.2 в качестве основы и подключаюсь к удаленному серверу через IOM. Если я запускаю записную книжку на Python, например, с

 import saspy
%reload_ext saspy.sas_magic
ss = saspy.SASsession(cfgname="xxx")
 

тогда соединение работает нормально. Иногда время ожидания истекает, но это, вероятно, проблема с сервером.

Однако, если я запускаю записную книжку SAS, при попытке отправить фрагмент кода я получаю результат ошибки:

 [<class 'TypeError'>, TypeError("Frame 0 ({'shell': [b'f8fd30a1-60bc-4f25-...) does not support the buffer interface."), <traceback object at 0x7fad01e41100>]
 

В окне терминала, в котором запущен контейнер, также есть множество сообщений об ошибках:

 notebook_1  | [I 17:14:56.181 NotebookApp] Kernel started: 58182c39-9df4-4922-b068-1d6bde76c31a, name: sas
notebook_1  | [IPKernelApp] ERROR | Exception in message handler:
notebook_1  | Traceback (most recent call last):
notebook_1  |   File "/opt/conda/lib/python3.9/site-packages/ipykernel/kernelbase.py", line 352, in dispatch_shell
notebook_1  |     await result
notebook_1  |   File "/opt/conda/lib/python3.9/site-packages/ipykernel/kernelbase.py", line 642, in execute_request
notebook_1  |     reply_content = self.do_execute(
notebook_1  |   File "/opt/conda/lib/python3.9/site-packages/metakernel/_metakernel.py", line 397, in do_execute
notebook_1  |     retval = self.do_execute_direct(code)
notebook_1  |   File "/opt/conda/lib/python3.9/site-packages/sas_kernel/kernel.py", line 213, in do_execute_direct
notebook_1  |     res = self.mva.submit(code, prompt=self.promptDict)
notebook_1  | AttributeError: 'NoneType' object has no attribute 'submit'
 

Файл dockerfile предназначен для использования за брандмауэром корпорации, поэтому содержит некоторые конфиденциальные записи, что затрудняет приведение воспроизводимого примера. Но суть в том, что:

 FROM jupyter/pyspark-notebook:notebook-6.4.2

RUN mamba install -c conda-forge -y nodejs amp;amp; 
    conda clean --all -f -y amp;amp; 
    fix-permissions $CONDA_DIR amp;amp; 
    fix-permissions /home/$NB_USER

RUN pip install jupyterlab_templates amp;amp;
    jupyter labextension install jupyterlab_templates amp;amp; 
    jupyter serverextension enable --py jupyterlab_templates

RUN pip install pytest sas_kernel

# Adding SAS config
ADD saspy/*.jar /opt/conda/lib/python3.9/site-packages/saspy/java/
ADD saspy/sascfg_personal.py /opt/conda/lib/python3.9/site-packages/saspy/
 

Некоторые конкретные версии:

 Python 3.9.6

jupyter core     : 4.7.1
jupyter-notebook : 6.4.2
qtconsole        : not installed
ipython          : 7.26.0
ipykernel        : 6.0.3
jupyter client   : 6.1.12
jupyter lab      : 3.1.4
nbconvert        : 6.1.0
ipywidgets       : 7.6.3
nbformat         : 5.1.3
traitlets        : 5.0.5

sas-kernel                2.4.11
saspy                     3.7.5  
 

Как я могу это исправить?

Комментарии:

1. Более ранняя сборка изображения с использованием Python 3.7 работала, поэтому мне интересно, не является ли это проблемой совместимости с Python 3.9

2. Кажется правдоподобным. Я бы разместил пост в проекте GitHub — Том там довольно активен.

3. Ошибка выглядит как ошибка python: github.com/booksbyus/zguide/issues/747 например. Я бы предположил, что изменение набора текста вызвало проблему.

4. Спасибо @joe, я поднял там один вопрос .

5. Я только что протестировал 3.9 и столкнулся с той же проблемой. Я заметил, что проблема, вероятно, заключается в самом соединении SAS — когда я правильно получу sascfg_personal.py настроенный, он пытается установить соединение и терпит неудачу (в то время как saspy в записной книжке python работает нормально). Итак, вероятно, что-то в sas_kernel нуждается в исправлении для 3.9, я думаю? Я действительно думаю, что ошибка, которую вы перечисляете, в некотором роде неуместна — это просто обработчик ошибок, который на самом деле не работает должным образом, поэтому вы можете захотеть посмотреть, есть ли в консоли ошибки, связанные с подключением SAS.