kyn*_*kos 2 python import package
我的应用程序具有与此类似的结构:
myapp.py
basemod.py
[pkg1]
__init__.py
mod1.py
[pkg2]
__init__.py
mod2.py
Run Code Online (Sandbox Code Playgroud)
myapp.py:
import pkg1
import pkg2
if __name__ == '__main__':
pkg1.main()
pkg2.main()
Run Code Online (Sandbox Code Playgroud)
basemod.py:
import pkg1
def get_msg():
return pkg1.msg
Run Code Online (Sandbox Code Playgroud)
pkg1/__init__.py:
import mod1
msg = None
def main():
global msg
mod1.set_bar()
msg = mod1.bar
Run Code Online (Sandbox Code Playgroud)
pkg1/mod1.py:
bar = None
def set_bar():
global bar
bar = 'Hello World'
Run Code Online (Sandbox Code Playgroud)
pkg2/__init__.py:
import mod2
def main():
mod2.print_foo()
Run Code Online (Sandbox Code Playgroud)
pkg2/mod2.py:
import basemod
foo = basemod.get_msg()
def print_foo():
print(foo)
Run Code Online (Sandbox Code Playgroud)
如果我跑,myapp.py我得到:
None
Run Code Online (Sandbox Code Playgroud)
在我看来,我期待:
Hello World
Run Code Online (Sandbox Code Playgroud)
我的目标是保持两个包完全独立,并且只通过通信basemod.py,这是一种API pkg1.
我开始认为我还没有完全理解包中的导入是如何工作的,我做错了什么?
谢谢!
我花了一些时间来阅读所有代码,但看起来你的问题是pkg2/mod2.py.该行在foo = basemod.get_msg()第一次导入文件时执行,而不会再次执行.所以当你改变它的值时mod1.bar,它已经执行了,而且foo是None.
解决方案应该只是将该行移动到print_foo函数中,因此只有在调用该函数时才执行它 - 这是在设置相关值的代码之后.