__name__的值来自哪里?

 恨之无用_367 发布于 2023-02-13 10:10

所以我有几个django设置文件,一个用于测试,另一个用于不同的客户.

这些设置文件sys.path都不会发生任何变化.

所有这些都包含一个包含的单一基本设置文件INSTALLED_APPS.

大多数文件都有代码执行此操作:

import logging
logger = logging.getLogger(__name__)

logger.error("Something went wrong")

在我的测试设置文件中,模块__name__看起来像saml.xyzlogger.name,saml.xyz但是当我使用不同的设置文件时,模块__name__看起来像是apps.saml.xyz使用logger.name apps.saml.xyz.

这会导致错过某些日志消息,因为处理程序连接到错误的位置.处理程序saml.xyz不会获取消息,apps.saml.xyz反之亦然.所有路由都基于配置的记录器/处理程序,包括应用程序.部分与否.

那么python如何决定__name__给哪个文件,以及我的不同设置文件如何在__name__不改变sys.path的情况下影响它?

命令在其他方面是相同的:

python manage.py test --settings=projectname.test saml

产量

>>> logger.name
'saml.xyz'

要么

python manage.py test --settings=projectname.customer saml

产量

>>> logger.name
'apps.saml.xyz'

Martijn Piet.. 6

__name__ 是导入当前模块的名称.

如果模块与进口import saml.xyz,__name__反映了直接.如果您有时看到apps.saml.xyz您的模块是使用名称导入的,并且在内存中加载了两个模块副本; Python认为这两者是分开的.

您应该避免导入嵌套模块; 使用只有顶级名.坚持无论是apps.saml.xyzsaml.xyz,但如果是后者,必须使用,要确保apps/不是一个包,而不是本身的Python模块搜索路径中列出sys.path.

1 个回答
  • __name__ 是导入当前模块的名称.

    如果模块与进口import saml.xyz,__name__反映了直接.如果您有时看到apps.saml.xyz您的模块是使用名称导入的,并且在内存中加载了两个模块副本; Python认为这两者是分开的.

    您应该避免导入嵌套模块; 使用只有顶级名.坚持无论是apps.saml.xyzsaml.xyz,但如果是后者,必须使用,要确保apps/不是一个包,而不是本身的Python模块搜索路径中列出sys.path.

    2023-02-13 10:13 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有