首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无效的相对导入到父文件夹

无效的相对导入到父文件夹
EN

Stack Overflow用户
提问于 2020-07-07 10:12:39
回答 1查看 95关注 0票数 1

给定以下文件夹结构

代码语言:javascript
运行
复制
scripts
    __init__.py
    prepare_dot_env.py
    random_folder
        __init__.py
        index.py

from ..prepare_dot_env import prepareDotEnvBot中的scripts/random_folder/index.py导入语句为例。

当在python index.py中运行scripts/random_folder时,会抛出ImportError: attempted relative import with no known parent package following exception

根据规格说明,假设两个__init__.py文件都是空的,这应该是可以的。这里的陷阱是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-07 10:28:35

TLDR:将文件作为包的一个模块执行:

代码语言:javascript
运行
复制
$ python3 -m scripts.random_folder.index

如果没有安装包,则必须从包含scripts/的文件夹或通过将此文件夹添加到PYTHONPATH来完成。

相对路径通过包操作工作,而不是文件系统操作。.的意思是“一个包向上”,而不是“一个文件夹向上”。这意味着相对.需要有关当前包位置的信息。属性包含以下信息:

该属性用于计算主要模块的显式相对导入(如PEP 366中定义的),而不是__name__。预期它具有与__spec__.parent相同的值。

所需信息由合格导入设置,包括-m标志:

代码语言:javascript
运行
复制
$ # script content: package metadata and import
$ cat scripts/random_folder/index.py
print(__package__)
print(__name__)
from ..prepare_dot_env import bar
print(bar)
$ # script as package member
$ python3 -m scripts.random_folder.index
scripts.random_folder
__main__
Placeholder to demonstrate import
$ # script as standalone executable
$ python scripts/random_folder/index.py
None
__main__
Traceback (most recent call last):
  File "scripts/random_folder/index.py", line 3, in <module>
    from ..prepare_dot_env import bar
ValueError: Attempted relative import in non-package
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62772923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档