# Librería que se importa bien en consola, pero dentro de OBS tira error

**URL:** <https://pyar.discourse.group/t/libreria-que-se-importa-bien-en-consola-pero-dentro-de-obs-tira-error/271>\
**Category:** Sin categoría\
**Created:** [3 Mayo, 2020 14:09 UTC](https://pyar.discourse.group/t/libreria-que-se-importa-bien-en-consola-pero-dentro-de-obs-tira-error/271 "2020-05-03T14:09:36Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![MarioMey](https://yyz2.discourse-cdn.com/free1/user_avatar/pyar.discourse.group/mariomey/32/163_2.png) [@MarioMey](https://pyar.discourse.group/u/MarioMey)\
**Post date:** [3 Mayo, 2020 14:09 UTC](https://pyar.discourse.group/t/libreria-que-se-importa-bien-en-consola-pero-dentro-de-obs-tira-error/271/1 "2020-05-03T14:09:36Z")

</div>

Buen día, gente. Estoy tratando de ejecutar un código para enviar y recibir mensajes OSC (OpenSoundControl) desde y hacia OBS (OpenBoradcasterSoftware). La librería que quiero usar es python-osc. Es simple y funciona bien… desde la consola. Desde OBS, se puede importar la parte de cliente, para enviar mensajes… pero para recibir, cuando hago `from pythonosc import osc_server`, salta este error:

> 3.7.3 (default, Dec 20 2019, 18:57:59)  
> [GCC 8.3.0]  
> Traceback (most recent call last):  
> File “/home/mario/videoconfestejo/obs-scripts/OSCOBS\_videoconfestejo.py”, line 18, in   
> from pythonosc import osc\_server  
> File “/home/mario/.local/lib/python3.7/site-packages/pythonosc/osc\_server.py”, line 4, in   
> import asyncio  
> File “/usr/lib/python3.7/asyncio/ **init**.py”, line 8, in   
> from .base\_events import \*  
> File “/usr/lib/python3.7/asyncio/base\_events.py”, line 39, in   
> from . import events  
> File “/usr/lib/python3.7/asyncio/events.py”, line 14, in   
> import contextvars  
> File “/usr/lib/python3.7/contextvars.py”, line 1, in   
> from \_contextvars import Context, ContextVar, Token, copy\_context  
> ImportError: /usr/lib/python3.7/lib-dynload/\_contextvars.cpython-37m-x86\_64-linux-gnu.so: undefined symbol: PyContext\_Type

Como se ve al principio, le hice un `sys.version` para saber la versión de Python. Es la misma que tengo en mi sistema (Debian 10 Buster). Pero desde la consola funciona perfecto y desde OBS salta el error.

Cabe aclarar que OBS lo compilé acá mismo.

Lo reporté en el github de python-osc y en [obs-studio](https://github.com/obsproject/obs-studio/issues/2851). En este útlimo alguien me dijo:

> Regardless of the version of python installed on your system OBS documentation clearly states that version 3.6 is the only one supported  
> [Python/Lua Scripting — OBS Studio 30.0.0 documentation](https://obsproject.com/docs/scripting.html)  
> The version match is defined at compile time as swig is used for interop between C code and python

Pero sigue siendo confuso para mí. Lo compilé acá, ni siquiera tengo la versión 3.6 de Python instalada.

¿Qué se puede hacer?

---

<div class="post-metadata">

**Author:** ![ssebastianj](https://avatars.discourse-cdn.com/v4/letter/s/ed8c4c/32.png) [@ssebastianj](https://pyar.discourse.group/u/ssebastianj)\
**Post date:** [4 Mayo, 2020 22:17 UTC](https://pyar.discourse.group/t/libreria-que-se-importa-bien-en-consola-pero-dentro-de-obs-tira-error/271/2 "2020-05-04T22:17:40Z")

</div>

1. Justamente hace unas semanas atrás, leyendo la documentación de `OBS Studio` sobre cómo hacer plugins en Python para `OBS` y cómo hacer testing de los mismos, me topé con que (por el momento, supongo) soporta sólo `Python 3.6`.

Como respondieron del proyecto, parece que la gente de `OBS` hace una versión _especial_ del intérprete de Python. Por ejemplo, lo que llegué a determinar en su momento fue: en mi S.O. tengo a nivel global activado `Python 3.8.2`, por otro lado el intérprete que utiliza `OBS` se encuentra en el directorio `/usr/lib/obs-scripting`:

```auto
obs-scripting
├── obslua.so
├── obspython.py
└── _obspython.so

```

Ejecutando lo siguiente:

```auto
$ strings _obspython.so | rg '3\.\d+'`
libpython3.6m.so.1.0
GCC_3.0
GLIBCXX_3.4.18
GLIBCXX_3.4
CXXABI_1.3.5
GLIBC_2.3.4
libpython3.6m

```

1. Por otro lado, el soporte para `Context Variables` fue agregado en [`Python 3.7`](https://docs.python.org/3.7/whatsnew/3.7.html#whatsnew37-pep567). Podrías probar utilizando un [_backport_ de `contextvars` para Python 3.6](https://github.com/MagicStack/contextvars)

Tal vez alguien con más experiencia con `OBS` + `Python` pueda aportar más al respecto. Éxitos y saludos.

---

<div class="post-metadata">

**Author:** ![MarioMey](https://yyz2.discourse-cdn.com/free1/user_avatar/pyar.discourse.group/mariomey/32/163_2.png) [@MarioMey](https://pyar.discourse.group/u/MarioMey)\
**Post date:** [4 Mayo, 2020 23:39 UTC](https://pyar.discourse.group/t/libreria-que-se-importa-bien-en-consola-pero-dentro-de-obs-tira-error/271/3 "2020-05-04T23:39:04Z")

</div>

Qué bueno que entendés qué está sucediendo… porque a mí se me hace imposible.

Está buena la idea de probar con ese backport, pero necesito un poco más de info. ¿Tengo que instalar Python 3.6 para instalar ese backport? ¿Tengo que compilar OBS de nuevo cambiando algo en el CMake?

Gracias mil.

---

<div class="post-metadata">

**Author:** ![MarioMey](https://yyz2.discourse-cdn.com/free1/user_avatar/pyar.discourse.group/mariomey/32/163_2.png) [@MarioMey](https://pyar.discourse.group/u/MarioMey)\
**Post date:** [14 Enero, 2021 22:16 UTC](https://pyar.discourse.group/t/libreria-que-se-importa-bien-en-consola-pero-dentro-de-obs-tira-error/271/5 "2021-01-14T22:16:31Z")

</div>

Bueno, el problema se puede resolver según lo que me dijeron en el Pull Request #3335 (no pongo link porque soy nuevo y me van a bloquear el mensaje) en el Github de OBS. El PR me genera un Segment Fault, pero me dijeron que cargue `D_PRELOAD=/path/libpython3.7.so` antes de ejecutar OBS. La discución que tienen en el hilo del Pull Request no entiendo ni goma… pero lo que me dijo, lo hice y funciona.
