栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

隐式相对导入在Python中如何工作?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

隐式相对导入在Python中如何工作?

软件包是带有

__init__.py
文件的目录,是的,并且 在模块搜索路径上找到时
作为模块加载。所以
pkg
只有一个包,你可以导入和处理作为一个整体 ,如果父目录是模块搜索路径上

但是通过将

pkg/core/main.py
文件作为 脚本
运行,Python将
pkg/core
目录添加到了模块搜索路径,而不是的父目录
pkg
__init__.py
现在,您的模块搜索路径上确实有一个文件,但这不是定义包的原因。您只有一个
__main__
模块,没有其他任何包关系,并且您不能依赖隐式相对导入。

您有三种选择:

  1. 不要将包中的文件作为脚本运行。将脚本文件 放在之外 ,并根据需要导入脚本。你可以把它 旁边

    pkg
    目录,或者确保
    pkg
    目录首次安装到一个目录已经是模块搜索路径,或让你的脚本计算添加到正确的道路
    sys.path

  2. 使用

    -m
    命令行开关可以像运行脚本一样运行模块。如果您使用
    python -m pkg.core
    Python,则会查找
    __main__.py
    文件并将其作为脚本运行。该
    -m
    交换机将增加当前工作目录到你的模块搜索路径,所以你可以使用这个命令时,你在正确的工作目录,这样就可以了。或者将软件包安装在模块搜索路径上已经存在的目录中。

  3. 让您的脚本将正确的目录添加到模块搜索路径(基于

    os.path.absolute(__file__)
    以获取当前文件的路径)。考虑到您的脚本 始终 被命名为
    __main__
    ,并且导入
    pkg.core.main
    将添加另一个独立的模块对象;您将拥有两个单独的命名空间。

我也 强烈
建议不要使用隐式相对导入。您可以通过添加嵌套的软件包或具有相同名称的模块来轻松地屏蔽顶级模块和软件包。如果您尝试在包内使用,将

pkg/time.py
在standard-
library
time
模块之前找到。相反,请使用 显式 相对模块引用的Python
3模型;添加到您的所有文件,然后用于明确指出从何处导入模块。
import time``pkg
__
from __future__ importabsolute_import``from . import <name>



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/638534.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号