如何从另一个文件夹和子文件夹导入python文件

时间:2019-07-15 13:45:37

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

现在我正在使用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+?该如何解决。

1 个答案:

答案 0 :(得分:0)

以下结构应该起作用:

# 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 class移到另一个文件中,然后将其导入main.py和commit.py中。