code: func (intr *Interpreter) ExecModule(ctx context.Context, pkg, path string) (starlark.StringDict, error) {
  	key, err := makeModuleKey(fmt.Sprintf("@%s//%s", pkg, path), nil)
  	if err != nil {
  		return nil, err
  	}
  
  	// If the module has been loaded previously it is not allowed to be 'exec'-ed.
  	// Modules are either 'library-like' or 'script-like', not both.
  	if _, yes := intr.modules[key]; yes {
  		return nil, errors.New("the module has been loaded before and therefore is not executable")
  	}
  
  	// Reexecing a module is forbidden.
  	if _, yes := intr.execed[key]; yes {
  		return nil, errors.New("the module has already been executed, 'exec'-ing same code twice is forbidden")
  	}
  	intr.execed[key] = struct{}{}
  
  	// Actually execute the code.
  	return intr.runModule(ctx, key, ThreadExecing)
  }
docs: // ExecModule finds and executes a starlark module, returning its dict.
  //
  // This is similar to exec(...) statement: always executes the module.
  //
  // 'pkg' is a package alias, it will be used to lookup the package loader in
  // intr.Packages. 'path' is a module path (without leading '//') within
  // the package.
  //
  // The context ends up available to builtins through Context(...).