我的项目路径如下:
main.py
modules/
__init__.py
databaseManager.py
sync.py
excel.py
在main.py中:
from modules.databaseManger import addExcelToDb, searchInDbAll
from modules.excel import search, showExcelDirContents
from modules.sync import syncExcelAndDB
,例如在database.py中:
from modules.excel import showExcelDirContents
from modules.sync import insertExcelNameToSyncDb
但是当我运行main.py时出现此错误:
Traceback (most recent call last):
File "main.py", line 6, in <module>
from modules.databaseManger import searchIn
ImportError: cannot import name 'searchInDbAll'
并且在尝试将模块目录中的每个文件中的函数导入其他文件时也出错。
我需要import
的一些例子。
答案 0 :(得分:0)
您可以附加到您放置模块的路径:
import sys
sys.path.append('modules/')
或
import sys
sys.path.append('c:/mycode/stuff/modules/')
注意这些是正斜杠,或者您可以使用双反斜杠,例如\\
然后将/ databaseManger.py文件放在/ modules
中您还需要在名为的 这只是一个空文件 然后你应该能够做到: __init__.py
from databaseManger import addExcelToDb, searchInDbAll
答案 1 :(得分:0)
这是循环导入问题。
<强>解释强>
首先触发导入databaseManager
模块。
在此databaseManager
代码开始导入excel
。
在excel
导入期间,excel
代码尝试从searchInDbAll()
检索函数databaseManager
。但是那时候这个函数不存在 - 因为databaseManager
正在导入excel
并且他还没有开始定义任何函数。
如何解决:
在存在循环导入冲突的模块中,导入模块而不是函数。例如,更改此:
from modules.excel import showExcelDirContents
到那个:
from modules import excel
当然,您必须更改相应的函数调用,从showExcelDirContents()
到excel.showExcelDirContents()
。
您必须在databaseManger
,excel
和sync
模块中执行此操作。通过此修复,我实际上可以运行您的代码。
是的,删除附加到sys.path,这是错误的