python - ModuleNotFoundError:没有命名模块,但文件嵌套在模块中
问题描述
我对 Python 中的模块有一个查询。
使用 VSCode 我设置了以下简单代码:
Demo/
Test.py
z1/
\_\_init\_\_.py
Foo.py
z2/
\_\_init\_\_.py
Screen.py
screen.py 包含:
class Screen:
SCREEN_SIZE = [800, 600]
和 z2/__init__.py
from z1.z2.Screen import *
并且以下 Foo.py 和 Test.py 都有:
from z1.z2.Screen import *
print(Screen.SCREEN_SIZE)
为什么当我运行 Test.py 时,我得到:
[800, 600]
但是当我运行 Foo.py 时,我得到:
File "***\Python\z1\Foo.py", line 1, in <module>
from z1.z2 import *
ModuleNotFoundError: No module named 'z1'
我可以将 __init__.py 中的 z1.z2 更改为 z2,但是 Test.py 不起作用。有什么办法让它对这两个文件都有效吗?
解决方案
我个人不喜欢 Python 的导入系统。运行 Foo.py 时是否能够from z2.Screen import *
成功导入使用?
我(不幸的是)也使用以下内容来处理测试代码
try:
from x.y import z
except ImportError:
from y import z
但我想您也可以使用os.path将根路径添加到 Foo.py 。在 Foo.py 你可以尝试添加
import sys
sys.path.append('../')
推荐阅读
- java - 无法使用 Google 移动视觉 API 检测数据矩阵格式
- multithreading - Dart 中的多线程和异步等待有什么区别,我该如何正确使用它?
- ionic-framework - 使用 IONIC 3 和谷歌照片 API 检索谷歌照片
- bash - 如何比较 2 个模式文件,以便我可以在另一个文件中添加列并填充一些默认值?
- python - 转换成字典
- ruby-on-rails - Bundler 没有安装我的 gem 的依赖项
- vue.js - 我应该在 Nuxt.js 项目中将上传目录放在哪里?
- android - 我想拨打以 ,01 结尾的号码#
- dafny - 达芙妮。带有布尔值的对不等于
- c# - UIDocumentInteractionController 总是创建一个副本