[Python] Nuitka onefile can't find directory for dynamic extension loading

Discussão em 'Python' iniciado por Stack, Junho 18, 2025.

  1. Stack

    Stack Membro Participativo

    I'm working on a Pycord bot project, and I'm using Nuitka to compile it. My goal is to compile the main script as a single file (--onefile) for distribution, but still be able to dynamically load command modules from a commands/ directory at runtime.

    Project Structure (I must keep this layout):

    Project/
    ├── script.py # compiled with --onefile
    └── commands/
    ├── __init__.py # NOT compiled
    └── ping.py # compiled with --module


    Reason for this structure is I want to load command extensions dynamically like this:

    import os

    def load_all(bot):

    cmds_dir = os.path.dirname(__file__) # Root directory for the commands.
    files = os.listdir(cmds_dir) # List of files & folder of commands root directory.

    for file in files:
    name, ext = os.path.splitext(file)
    if name != "__init__":
    bot.load_extension(f"commands.{name}")


    Each commands/*.py file contains:

    from discord.ext import commands

    def setup(bot):
    @bot.command()
    async def ping(ctx):
    await ctx.respond("Pong!")


    After building with Nuitka (script.py using --onefile, and ping.py with --module), running the executable gives:

    ┌──(.venv)─(...)-[~/Desktop/PyTesting]
    └─$ ./script.bin
    Traceback (most recent call last):
    File "/tmp/onefile_278932_1750239107_362003/script.py", line 21, in <module>
    File "/tmp/onefile_278932_1750239107_362003/commands/__init__.py", line 7, in load_all
    FileNotFoundError: [Errno 2] No such file or directory: '/tmp/onefile_278932_1750239107_362003/commands'


    My goals:

    • script.py compiled as a single executable.
    • __init__.py should stay uncompiled (used for dynamic loading logic)
    • Only recompile individual command modules (like ping.py) when needed, instead of recompiling everything — to speed up development.
    • This structure is used to only recompile command files if modified, if any fix to this issue with this feature it will be fine.

    Continue reading...

Compartilhe esta Página