relative import in Python 3(Python3中的相对导入)
问题描述
假设我的项目结构如下:
myproject
├── calendar.py
├── foo.py
└── __init__.py
在foo.py中,我有
from calendar import isleap
我认为在Python3.x中,如果不使用显式的.calar,上面的代码应该加载内置的日历模块,而不是我自己的日历模块,但显然我本地的calendar.py仍在导入,并且它抛出一个错误,因为mypkg/calendar.py中没有‘isleap’。为什么将我的本地日历模块导入此处?
我必须将calendar.py重命名为cal.py才能完成此工作。
推荐答案
from __future__ import absolute_import
是Python3上的默认设置。因此,from calendar import isleap
语句导入顶级模块calendar
。
如果您看到其他结果,则表示您没有使用Python3,或者您正试图从包中以脚本形式运行一个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"
cd myproject; python foo.py
。改为:python -mmyproject.foo
(或者您可以define what scripts should be run in setup.py
或create a similar script manually: from myproject import foo; foo.main()
)。
如果要将Python包作为脚本运行,请创建myproject/__main__.py
,然后运行python -mmyproject
。
如果要在Python3中执行相对导入,请显式执行,例如myproject/foo.py
:
from .calendar import something
或执行绝对导入:
from myproject.calendar import something
这篇关于Python3中的相对导入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Python3中的相对导入


- 如何将一个类的函数分成多个文件? 2022-01-01
- 沿轴计算直方图 2022-01-01
- 如何在 python3 中将 OrderedDict 转换为常规字典 2022-01-01
- pytorch 中的自适应池是如何工作的? 2022-07-12
- 使用Heroku上托管的Selenium登录Instagram时,找不到元素';用户名'; 2022-01-01
- 如何在 Python 的元组列表中对每个元组中的第一个值求和? 2022-01-01
- 分析异常:路径不存在:dbfs:/databricks/python/lib/python3.7/site-packages/sampleFolder/data; 2022-01-01
- python check_output 失败,退出状态为 1,但 Popen 适用于相同的命令 2022-01-01
- padding='same' 转换为 PyTorch padding=# 2022-01-01
- python-m http.server 443--使用SSL? 2022-01-01