Python导入模块仅一次

2024-04-28 22:22:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有2个python脚本。在

satellite_utils.py
apply_errata.py

我运行的脚本是:

^{pr2}$

apply_errata.py调用在satellite_utils.py中定义的函数。在

现在我使用模块logging来记录我的消息。我只想导入一次,而不必在每个脚本中声明它。在

如果我在apply_errata.py中定义logging,并且在satellite_utils.py中引用了它,我得到:

Traceback (most recent call last):
  File "apply_errata.py", line 20, in <module>
    satellite_utils.applyErrata(args.release, args.all, args.rollback)
  File "/root/config-3.1.21/automated-os-patching/satellite_utils.py", line 34, in applyErrata
    applyErrataOnSystem(system, release, automaticRollback, [erratum])
  File "/root/config-3.1.21/automated-os-patching/satellite_utils.py", line 39, in applyErrataOnSystem
    logging.warning('is when this event was logged.')
NameError: name 'logging' is not defined

有什么办法可以避免在每个文件中使用import语句?在


Tags: inpy脚本release定义logginglineargs
1条回答
网友
1楼 · 发布于 2024-04-28 22:22:23

您可以通过在脚本中导入必要的库,然后使用wildchar将该脚本中的所有内容导入到另一个脚本中。通过这样做,您不会再次导入所有这些脚本,而是引用它们,它们可以在第二个脚本中使用,就像在第一个脚本中使用它们一样。在

例如: 1脚本1.py

import logging
import something
.....
...
log_i=logging.info
log_d=logging.debug
  1. 脚本2.py

    from Script1 import * #import all in Script1
    log_i("this is info log")
    log_d("this is debug log")#use the imported data
    

这里的日志是在Script1中导入的,我将从Script1导入Script2,这意味着Script1中使用的所有库、变量、函数定义都可以从Script2访问和修改。因此,我在Script2中直接使用日志,而没有任何声明/赋值。在

根据@anugrah的评论,您可以使用__init__.py初始化目录中的模块,以便可以像上面的方法一样导入和使用它们。所以如果你选择这个方法

abc/\uu init\uy.py

abc公司/模块.py

import logging,os,sys
log_i=logging.info
log_d=logging.debug

Script1.py

from abc.modules import log_* #now I'm importing only log_i,log_d
log_i("this is info log")
log_d("this is debug log")

相关问题 更多 >