簡體   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