繁体   English   中英

为什么我不能从同级文件夹导入?

[英]Why can't I import from sibling folder?

使用 python 从头开始创建应用程序仍然有点新。 这是我的文件结构

Sudoku
  |--__init__.py
  |--game.py
  |--__pycache__
  |--components
      |---__init__py.
      |--board.py
      |__pycache__(not sure how this got here?)
  |--gui
      |--__init__.py
      |--gui.kv
  |--solver
      |--__init__.py
      |--mysolver.py

我有一个正在运行的 Sudou 游戏,我的组件和 gui 模块在我的game.py中使用。 现在我正在尝试编写一个数独求解器,它使用继承了我拥有的Board class(因为它有一些有用的方法并且有棋盘数据)。

在我的solver.mysolver.py中,我尝试from components.board import Board ,上面写着“没有名为组件的模块”,这是有道理的,因为它们不在同一级别。

当我尝试from.components.board import Board我认为可以工作时,我attempted relative import with no known parent package 我怎样才能让我所有的包“知道”他们的父 package 是什么? 我所有的__init__.py文件都是空的——不应该是吗? 我的结构也有问题 - 我的components文件夹中有一个__pycache__ ,我不知道为什么。 我在 components 文件夹中直接测试了我的board.py有一段时间 - 这是创建这个的原因吗?

从树外部导入您当前文件夹的根目录是很棘手的。 要从父文件夹或同级文件夹导入,请尝试使用以下命令开始导入:

import sys
sys.path.append("..")

这会将父文件夹添加到文件夹的路径列表中,以查找使您的兄弟姐妹可见的模块。 这有点恶心,但它对我来说是一种快速修复。

当我第一次开始使用 python 时,我也遇到了这个布局问题。 想要拥有像求解器一样使用所有相同代码的可运行脚本的诱惑。 Python 真的不希望我们这样布局。

如果 mysolver.py 位于 game.py 的根文件夹中,您可能会发现处理一般事物会更容易。

假设我想从 board.py 导入,我在 game.py 中的导入语句就像

from components.board import <my_class_name>

pycache是编译好的 pyhton 类

Sudoku
  |--__init__.py
  |--game.py
  |--__pycache__
  |--components
      |---__init__py.
      |--board.py
      |__pycache__(not sure how this got here?)
  |--gui
      |--__init__.py
      |--gui.kv
  |--solver
      |--__init__.py
      |--mysolver.py

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM