使模块在全球范围内可用

Make modules available globally

我正在尝试让我的模块在全球范围内可用

文件系统结构

main.py
module_static.py
folder/module_dynamic.py # this is example, but imagine 100s of modules

main.py

print('Loading module_static')
import module_static
module_static.test()

# Trying to make module_static available globally
globals()['module_static'] = module_static
__all__ = ['module_static']

print('Loading module_dynamic')
import sys
sys.path.append('./folder/')
import module_dynamic
module_dynamic.test()

module_static.py

def test():
    print('  -> This is module_static')

module_dynamic.py

def test():
    print('  -> This is module_dynamic')
    module_static.test()

运行 main.py 创建以下执行流程 main.py -> module_dynamic.py -> module_static.py

如您所见:

如何使 module_static.pymodule_dynamic.py 中可用(理想情况下无需在 module_dynamic.py 中编写任何额外代码)?

它无法按您期望的方式工作。 globals() return 脚本中全局变量的字典。也许这可以帮助你理解

你可以看一下这个课程,以便更好地理解

https://www.python-course.eu/python3_global_vs_local_variables.php

无论如何,您必须导入模块才能使用它

如果只是个人使用的本地工具,可以将其移动到文件夹中 {Python_installation_folder}/Lib.

然后,在任何脚本中,您将能够做到

import module_static

并使用您的模块。

如果您想与其他人共享您的模块,请在 PyPi 上发布(上传)它。你可以按照下面的教程 https://anweshadas.in/how-to-upload-a-package-in-pypi-using-twine/

并不是说这是好的做法,但你可以做到

main.py

import builtins
import module_static
builtins.module_static = module_static

这应该允许您从任何地方使用 module_static

有关 builtins 的更多信息:How to make a cross-module variable?