gpt4 book ai didi

python - Python 3 中的相对导入

转载 作者:行者123 更新时间:2023-11-30 22:56:06 24 4
gpt4 key购买 nike

假设我的项目结构如下:

myproject
├── calendar.py
├── foo.py
└── __init__.py

在 foo.py 中,我有

from calendar import isleap

我认为在Python 3.x中,如果不使用显式的.calendar,上面的代码应该加载内置日历模块而不是我自己的日历模块,但显然我的本地 calendar.py 仍在导入,并且会引发错误,因为 mypkg/calendar.py 中没有“isleap”。为什么我的本地日历模块被导入到这里?

我必须将 calendar.py 重命名为 cal.py 才能完成这项工作..

最佳答案

from __future__ import absolute_import是 Python 3 上的默认设置。因此 from calendar import isleap 语句导入顶级模块 calendar

如果您看到其他结果;这意味着您没有使用 Python 3,或者您正在尝试从包内部作为脚本运行 python 模块(myproject 目录本身位于 sys.path 中)。如果是后者,那么您的 calendar.py 将成为顶级模块,并且(由于当前目录位于 sys.path 中的 stdlib 目录之前)from calendar import isleap 从当前目录导入calendar.py"Never add a package directory, or any directory inside a package, directly to the Python path"

为了避免这种情况,不要直接从 python 包中运行模块,例如,不要这样做:cd myproject; python foo.py。改为执行此操作:python -mmyproject.foo(或者您可以 define what scripts should be run in setup.pycreate a similar script manually: from myproject import foo; foo.main() )。

如果您想将 Python 包作为脚本运行,请创建 myproject/__main__.py 然后运行 ​​python -mmyproject

<小时/>

如果你想在Python 3中进行相对导入;明确地执行此操作,例如在 myproject/foo.py 中:

from .calendar import something

或者进行绝对导入:

from myproject.calendar import something

关于python - Python 3 中的相对导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37139192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com