Skip to content

Unable to import custom python modules on Python 3.11+ #1687

@greenaar

Description

@greenaar

Describe the bug
Errbot running on python 3.11 in docker, unable to load a python library into a plugin

To Reproduce
plugin code:

from lib.chatutils import ChatUtils
from errbot import BotPlugin, botcmd

chatutils = ChatUtils()

class MyTest(BotPlugin):
    """Perform system level commands"""

    @botcmd()
    def am_i_admin(self, msg, _):
        admin = chatutils.is_admin(msg)
        return f"{chatutils.handle(msg)} {admin}"

python library (in plugins/lib/chatutils.py)

import os
import re

class ChatUtils:
    """
    A collection of common utilities used throughout the repo
    """
    def is_admin(self, msg, admins):
        if self.handle(msg) in admins:
            return True
        return False

    def handle(self, msg):
        try:
            return str(msg.frm).split("/")[1]
        except:
            return msg.frm

Expected behavior
Errbot should load the plugin.

** Actual behavior **

2024-04-22 19:54:18,251 INFO     errbot.core               Some plugins failed to start during bot startup:

Traceback (most recent call last):
  File "/errbot-data/lib/python3.11/site-packages/errbot/plugin_manager.py", line 289, in _load_plugins_generic
    plugin_classes = plugin_info.load_plugin_classes(
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/errbot-data/lib/python3.11/site-packages/errbot/plugin_info.py", line 100, in load_plugin_classes
    spec.loader.exec_module(modu1e)
  File "<frozen importlib._bootstrap_external>", line 940, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/errbot-data/eks-ops/errbot/plugins/mytest/mytest.py", line 5, in <module>
    import lib.chatutils
ModuleNotFoundError: No module named 'lib.chatutils'; 'lib' is not a package
Error: MyTest failed to activate: 'NoneType' object has no attribute 'is_activated'.

Environment (please complete the following information):

  • Errbot version: 6.2.0
  • OS version: Debian 12
  • Python version: Python 3.11.2
  • Using a virtual environment: yes
  • Using Docker: yes

Additional context

Config.py includes a reference to plugins, and sys.path via errbot returns:

Path: ['/errbot-data/code', '/errbot-data/code', '/errbot-data/bin', '/usr/lib/python311.zip', '/usr/lib/python3.11', '/usr/lib/python3.11/lib-dynload', '/errbot-data/lib/python3.11/site-packages', '/errbot-data/lib/python3.11/site-packages/errbot/storage', '/errbot-data/eks-ops/errbot/backends/err-backend-slackv3/src/slackv3', '/errbot-data/lib/python3.11/site-packages/errbot/core_plugins', '/errbot-data/eks-ops/errbot/plugins/mytest', '/errbot-data/eks-ops/errbot/plugins/ops', '/errbot-data/eks-ops/errbot/plugins/Git', '/errbot-data/eks-ops/errbot/plugins']

This includes (last entry) the plugins/ dir in the search path.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions