使模块在全球范围内可用

时间:2018-12-18 13:16:09

标签: python module global-variables global

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

文件系统结构

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

enter image description here

如您所见:

  • 模块加载正常
  • 但是,尽管试图使module_static在全球范围内可用,但它无法正常工作 module_dynamic.py 会抛出错误,指出module_static不存在

如何在module_static.py中提供module_dynamic.py(理想情况下不必在module_dynamic.py中编写任何其他代码)?

2 个答案:

答案 0 :(得分:2)

并不是说这是一种好习惯,但是您可以做到

main.py

import builtins
import module_static
builtins.module_static = module_static

这应该使您可以在任何地方使用module_static

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

答案 1 :(得分:1)

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

enter image description here

您可以看一下本课程以更好地了解

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/