代码之家  ›  专栏  ›  技术社区  ›  Hasan Kho

无法从包中导入python模块

  •  1
  • Hasan Kho  · 技术社区  · 6 年前

    我的项目路径如下:

    main.py
    modules/
         __init__.py
         databaseManager.py
         sync.py
         excel.py
    

    总的来说。py:

    from modules.databaseManger import addExcelToDb, searchInDbAll
    from modules.excel import search, showExcelDirContents
    from modules.sync import syncExcelAndDB
    

    例如在数据库中。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 ing。

    2 回复  |  直到 6 年前
        1
  •  0
  •   Andrii Maletskyi    6 年前

    这是 循环导入 问题

    说明:

    首先触发导入 databaseManager 单元

    在此期间 数据库管理器 代码开始导入 excel

    在期间 擅长 正在导入, 擅长 代码尝试检索函数 searchInDbAll() 从…起 数据库管理器 .但此时此函数不存在-因为 数据库管理器 正在导入 擅长 他还没有开始定义任何函数。

    如何修复:

    在存在循环导入冲突的模块中,导入模块而不是函数。例如,更改以下内容:

    from modules.excel import showExcelDirContents
    

    为此:

    from modules import excel
    

    当然,您必须更改相应的函数调用,从 showExcelDirContents() excel.showExcelDirContents()

    你必须在你的 databaseManger ,则, 擅长 sync 模块。通过此修复,我实际上可以运行您的代码。

    是的,删除sys的附件。路径,这是错误的

        2
  •  0
  •   sniperd Ali Ahmed    6 年前

    您可以在路径中附加模块,如下所示:

    import sys
    sys.path.append('modules/')
    

    import sys
    sys.path.append('c:/mycode/stuff/modules/')
    

    笔记 这些是正斜杠,或者可以使用双反斜杠,如\\

    那就让你的数据库管理员来吧。模块中的py文件

    您还需要在/modules文件夹中有一个名为:

    __init__.py
    

    这只是一个空文件

    那么您应该能够做到:

    from databaseManger import addExcelToDb, searchInDbAll