2

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

文件系统结构

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

主文件

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全球范围内提供,但它不起作用module_dynamic.py抛出错误说不module_static存在

我怎样才能module_static.py提供module_dynamic.py(理想情况下不必在 中编写任何额外的代码module_dynamic.py)?

4

2 回答 2

2

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

主文件

import builtins
import module_static
builtins.module_static = module_static

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

更多信息builtins如何制作跨模块变量?

于 2018-12-18T13:54:30.533 回答
1

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

在此处输入图像描述

您可以查看本课程以获得更好的理解

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/

于 2018-12-18T13:34:03.390 回答