"from-import"执行整个模块吗?

quo*_*tor 1 python import logging

好的,所以我知道它from-import与"完全"相同import,除了它显然不是因为命名空间的填充方式不同.

我的问题主要是因为我有一个utils模块,它有一个或两个函数,我的应用程序中的每个其他模块使用,我正在努力合并标准库logging模块,据我所知,我需要做的像这样的排序:

import logging
logging.basicConfig(filename="/var/log")  # I want file logging

baselogger = logging.getLogger("mine")
#do some customizations to baselogger
Run Code Online (Sandbox Code Playgroud)

然后在不同的模块中使用它我会再次导入日志记录:

import logging
logger = logging.getlogger("mine")

# log stuff
Run Code Online (Sandbox Code Playgroud)

但我想知道的是,如果我做了一个from utils import awesome_func遗嘱我的记录器肯定会被设置,记录模块是否会按照我想要的方式设置?

这也适用于其他通用设置.

ars*_*ars 6

你的问题的答案是肯定的.

有关导入过程的详细说明,请参阅Frederik Lundh的" 导入Python模块 ".

特别是,我将引用回答您查询的部分.

Python如何导入模块?

[...]

  1. 创建一个新的空模块对象(这本质上是一个字典)
  2. 将该模块对象插入sys.modules字典中
  3. 加载模块代码对象(如有必要,首先编译模块)
  4. 在新模块的命名空间中执行模块代码对象.代码分配的所有变量都可以通过模块对象获得.

以及使用from-import:

导入模块的方法有很多种

[...]

从X import a,b,c导入模块X,并在当前命名空间中为给定对象创建引用.或者换句话说,您现在可以在程序中使用a和b和c.

注意我已经省略了一些事情.值得阅读整篇文档,它实际上很短.


Ste*_*osh 5

看起来像答案是肯定的:

$ echo 'print "test"
def f1():
    print "f1"

def f2():
    print "f2"

' > util.py

$ echo 'from util import f1
f1()
from util import f2
f2()
' > test.py

$ python test.py 
test
f1
f2

$ 
Run Code Online (Sandbox Code Playgroud)