【问题标题】:How to import python-file from another folder and sub-folder如何从另一个文件夹和子文件夹导入 python 文件
【发布时间】:2019-11-24 05:42:00
【问题描述】:

现在我正在使用 Python 3.6.8,现在我对导入文件感到困惑。 不能用了

├── db
│   ├── commit.py
│   ├── config.py
│   ├── database.ini
│   └── __init__.py
└── main.py

这是我的代码结构。对于每个文件,

#commit.py 

from config import config 

class Commit():
     #many function
     #some process. Which use package from config
#config.py 

class config():
    #some process.
#database.ini 
#It's text file 
#__init__.py 
import commit 
import config
#main.py 

from db import commit 
from db import config 

class Main():
    #many function
    #include calling commit function 

if __name__=="__main__":
   #work with main function 

但我的程序仍然出错。当我运行 main.py 时,下面是错误消息。

db/__init__.py", line 1, in <module>
import commit
ModuleNotFoundError: No module named 'commit'

为什么它不能工作?因为是 Python 3+ 吗?如何解决这个问题。

【问题讨论】:

  • 如果从__init__.py 中完全删除import 语句会怎样?
  • 还是一样的错误。
  • 好的,下次试试。那么如果您将__init__.py 更改为from . import commit 而不是import commit,会发生什么?或者只是import .commit
  • 仍然是 "ModuleNotFoundError" : No mudle named ....
  • 你能在main.py 中做import db.commitimport db.config 吗?

标签: python python-3.x python-3.6 python-import init


【解决方案1】:

以下结构应该有效:

# main.py
from db.commit import *
from db.config import *

class Main():
   #many function
   #include calling commit function 

if __name__== "__main__":
   #work with main function

我想您需要从提交和配置文件中导入所有内容。但如果你只需要 Commit 类或 config 类,你可以修改如下代码:

from db.commit import Commit
from db.config import config

然后是其他文件

# init.py
# no imports

从 init.py 中删除导入

# config.py
class config():
    #some process.

config.py 和你的版本一样

# commit.py
from .config import *

class Commit():
    #many function
    #some process. Which use package from config

这种方式应该可以正常工作。

评论后编辑

如果从 main.py 导入 commit.py 模块中包含的函数,并且在 commit.py 模块中导入 main.py 模块中包含的函数,则将进行循环导入。

为了修复它,您应该以另一种方式组织项目结构。
例如,您可以将 Main 类移到另一个文件中,然后将其导入 main.py 和 commit.py。

【讨论】:

  • 它适用于 main.py 。但是当使用 commit.py 直接运行时,这是行不通的。 “ModuleNotFoundError:没有名为 'main.config' 的模块;'main' 不是包”。然后它对 main.py 的影响。现在我的 commit.py 无法导入 config.py。现在 main.py 可以运行了,但是 commit.py 出错了,因为它不能在 self 中导入 config.py。
猜你喜欢
  • 2020-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
  • 2019-08-16
  • 1970-01-01
  • 2022-06-13
相关资源
最近更新 更多