Python-仅导入一次模块
我有两个python脚本Python-仅导入一次模块,python,Python,我有两个python脚本 satellite_utils.py apply_errata.py 我运行的脚本是: python3.4 apply_errata.py apply_errata.py调用satellite_utils.py中定义的函数 现在我使用模块日志记录我的消息。我只想导入一次,而不必在每个脚本中声明 如果我在apply_errata.py中定义了日志记录,并在satellite_utils.py中对其进行了引用,我会得到: 我能在每个文件中避免导入语句吗 您可以通过在脚本
satellite_utils.py
apply_errata.py
我运行的脚本是:
python3.4 apply_errata.py
apply_errata.py调用satellite_utils.py中定义的函数
现在我使用模块日志记录我的消息。我只想导入一次,而不必在每个脚本中声明
如果我在apply_errata.py中定义了日志记录,并在satellite_utils.py中对其进行了引用,我会得到:
我能在每个文件中避免导入语句吗 您可以通过在脚本中导入必要的库,然后使用wildchar将该脚本中的所有内容导入到另一个脚本中。通过这样做,您不会再次导入它们,而是引用它们,它们可以在第二个脚本中使用,就像您在第一个脚本中使用它们一样 例如: 1.脚本1.py
import logging
import something
.....
...
log_i=logging.info
log_d=logging.debug
脚本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的评论,您可以使用_uinit__uuuuuuy.py初始化目录中的模块,以便可以像上述方法一样导入和使用它们。因此,如果你选择这种方法,那么它会像
abc/___;初始值.py
abc/modules.py
脚本1.py
import logging
import something
.....
...
log_i=logging.info
log_d=logging.debug
您可以在卫星应用程序中使用日志实例,如下所示:
# in apply_errata.py
import satellite_utils
satellite_utils.logger.info('hello there')
或
这是因为Python文件中定义的任何名称都附加到该文件的全局范围,而Python文件是模块,因此file==module,任何人都可以访问
需要指出的是,我们应该说,这不是一种规范的、更可取的做事方式。你是成年人了,你可以自己决定
为什么多次导入模块不是坏事:它们被Python缓存在sys.modules dict中,所以下次导入时,您只会得到缓存副本 为什么不在每个文件中导入它?如果要使用模块,则需要导入它。导入模块并不意味着要多次加载。这只意味着您正在代码中引用它。每个需要日志记录的模块都应该导入日志记录。您也可以将它们添加到_init__;.py文件中!请参阅您对uuu init_uuuuu.py的描述。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")
# in apply_errata.py
import satellite_utils
satellite_utils.logger.info('hello there')
# in apply_errata.py
from satellite_utils import logger
logger.info('hi there')