Python - 如何允许在不同的模块中使用函数?

时间:2013-07-14 18:48:24

标签: python function module packages

我有两个脚本。

Main.py
Update.py

我在 Main.py 中有一个功能,它基本上执行以下操作:

def log(message):
   print(message)
   os.system("echo " + message + " >> /logfile.txt")

Update.py 文件中,我有一个基本上进行更新的功能。但是,在整个更新功能中,它会使用此时的消息调用“log(message)”。

现在问题是,当我尝试使用 Main.py 脚本之外的函数时,我得到 NameError:全局名称“log”未定义

有任何帮助吗?我怎么能在任何地方使用'log'功能?

*简化代码以便解释。

修改

Main.py imports Update from /Scripts/Update.py
Update.py imports log from Main.py

当我尝试这个时,它无法说“无法导入名称更新”

3 个答案:

答案 0 :(得分:3)

不要log导入Main。这将重新运行Main.py中的代码,因为将Main.py作为脚本运行并将其作为模块导入并不等效。其他模块不应该依赖于主脚本中定义的函数。相反,将您的log函数放在另一个模块中并导入它,或让Main.py以某种方式显式地将记录器传递给其他模块。

更新:您无法导入Update,因为Python无法找到它。 Python在4 places中检查要导入的模块,但您应该感兴趣的是

  • 脚本所在的目录,以及
  • PYTHONPATH环境变量中指定的目录。

您需要将Main.py及其导入的内容放在同一目录中,或者将/Scripts添加到PYTHONPATH

答案 1 :(得分:1)

只需添加 Update.py

即可
from Main import log

您可以从Update.py调用log()

答案 2 :(得分:1)

您应该导入该功能:

from Main import log

或者最好:

import Main
Main.log()

对于互相导入的模块,请参阅How can I have modules that mutually import each other