Trying to make a menu using multiple modules
Modularise your modules
IMO rather than importing and cherry picking classes from submodules, instead can import the module and call its register method.
For testing have placed the addon in a  testing_testing folder, and given it the &quot;Testing&quot; category... will of-coarse need to rename to something more suitable.
Notice the submodules are imported from testing_testing rather than from current folder . which requires the addon must have the name specified by folder. This makes the imports viable when run from main thread. (eg tested in text editor).
Can alter the submodules by adding removing other classes without the need to edit init file. Only need to edit again for a new submodule.  Can use something like pkgutils.list_modules to look for modules in root folder and automate the imports of each, hence never needing to touch init to have any module placed in folder registered.
Reworked code.
testing_testing/__init__.py
bl_info = {
    &quot;name&quot;: &quot;Popup Macro&quot;,
    &quot;author&quot;: &quot;&quot;,
    &quot;version&quot;: (1, 0),
    &quot;blender&quot;: (2, 83, 0),
    &quot;location&quot;: &quot;DC_MT_macro_menu&quot;,
    &quot;description&quot;: &quot;&quot;,
    &quot;warning&quot;: &quot;&quot;,
    &quot;doc_url&quot;: &quot;&quot;,
    &quot;category&quot;: &quot;Testing&quot;,
}

# can use importlib.reload here instead 
import bpy
from testing_testing import operators, menus

modules = (operators, menus)


def register():
    for m in modules:
        m.register()


def unregister():
    for m in modules:
        m.unregister()


if __name__ == &quot;__main__&quot;:
    register()

testing_testing/operators.py
import bpy


class DC_OT_bevel_subdiv(bpy.types.Operator):
    bl_idname = &quot;3dview.bevel_subdiv&quot;
    bl_label = &quot;Subdivision Workflow&quot;

    def execute(self, context):
        ob = context.object
        bm = ob.modifiers.get(&quot;Bevel&quot;)

        bm = ob.modifiers.new(name=&quot;Bevel&quot;, type='BEVEL')
        bm.segments = 2
        bm.profile = 1
        bm.limit_method = 'WEIGHT'
        bm.miter_outer = 'MITER_ARC'
        bm.use_clamp_overlap = False

        return {'FINISHED'}


class DC_OT_bevel_second(bpy.types.Operator):
    bl_idname = &quot;3dview.bevel_second&quot;
    bl_label = &quot;Second Bevel&quot;

    def execute(self, context):
        ob = context.object
        bm = ob.modifiers.get(&quot;Bevel&quot;)

        bm = ob.modifiers.new(name=&quot;secBevel&quot;, type='BEVEL')
        bm.limit_method = 'ANGLE'
        bm.miter_outer = 'MITER_ARC'
        bm.use_clamp_overlap = False

        return {'FINISHED'}


classes = (DC_OT_bevel_second, DC_OT_bevel_subdiv,)

register, unregister = bpy.utils.register_classes_factory(classes)

if __name__ == &quot;__main__&quot;:
    register()

testing_testing/menus.py
import bpy

class DC_MT_macro_menu(bpy.types.Menu):
    bl_idname = &quot;DC_MT_macro_menu&quot;
    bl_label = &quot;Macro&quot;

    def draw(self, context):
        layout = self.layout

        layout.operator(&quot;3dview.bevel_subdiv&quot;)
        layout.operator(&quot;3dview.bevel_second&quot;)


classes = (DC_MT_macro_menu,)

register, unregister = bpy.utils.register_classes_factory(classes)

if __name__ == &quot;__main__&quot;:
    register()
    # test call
    bpy.ops.wm.call_menu(name=DC_MT_macro_menu.bl_idname)

Note can test if a module has a register method using
if hasattr(m, &quot;register&quot;):
    m.register()

On linux can select the folder and compress

A zip file that follows convention recommended here Addons: Only some .zips will install
Note: look for the error if it is saying the folder already exists then choose overwrite option, remove previous installation (delete folder, or hit remove button on addon)
The enabled addon,

after which the menu can be called from  for instance the python console

Running menus.py in text editor will also make the menu popup via a test call.
To hang your menu onto another during register, recommend writing your own register and unregister methods instead of using the factory generated methods.
Finally to make a shortcut to popup your menu, as displayed above the operator is &quot;wm.call_menu&quot; and set its name property to the bl_idname of your menu.