import - 为什么无法加载模块?
问题描述
显示 my project
的目录结构:
tree project
project
├── config.py
├── __init__.py
└── project.py
project.py 中的内容:
from . import config
def main():
pass
if __name__ == '__main__':
main()
内容__init__.py
:
__all__ = ['project','config']
from project import *
from . import config
config.py
为简单起见为空白。
加载模块:
cd project
import project
它遇到错误信息: Parent module '' not loaded, cannot perform relative import
为什么不能import project
?我发现如果project.py
重命名为myproject.py
,保持任何其他的东西和以前一样,import project
都可以工作。
包不project
与模块同名project.py
吗?
为什么相同的名字很重要?
解决方案
如果您尝试查看__package__
from project.py
,您会发现当您import project
在project/
文件夹内和在文件import project
夹外时,它从无变化。这是因为,当您在文件夹内时,您正在导入模块 project
(即project.py
文件),而从project/
文件夹外您正在导入project
包(即您正在运行__init__.py
文件)。
编写时from . import x
,您希望x
从当前包内部导入,但没有包上下文,因此它不能import .
推荐阅读
- html - Concordion Markdown 与 Concordion HTML
- asp.net - 如何在mysql数据库中存储带有字符串的自动增量ID
- sql - 如何使用sql server修剪字符串中大写字符之前的所有小写字符
- python - 我可以根据 python 数据框中的相同列值更新列的值吗?
- c# - 如何制作“webhook”?
- javascript - MomentJS/Date 对象默认 UTC
- flask - jinja2 在烧瓶 wt-form 上循环
- r - ggplot如何在x和y坐标中放置标题
- jenkins-pipeline - 有什么方法可以在不使用额外插件的情况下将变量从 bash 脚本传递到 Jenkinsfile
- keycloak - 当 keycloak 保护的容器副本高于 1 时,错误重定向过多