Python模块名称相互矛盾,具体取决于您在哪里运行代码

时间:2019-03-22 02:48:48

标签: python

这是我的文件夹结构-

enter image description here

api.py 导入IncidentHandler,如下所示-

import data.IncidentHandler

data.IncidentHandler 可以正常工作-在IncidentHandler.py内部,我有以下显示:

import BrowserHandler

当我从 api.py 运行代码时,出现此错误-

Traceback (most recent call last):
  File "api.py", line 9, in <module>
    import data.IncidentHandler
  File "/User/**mask**/**mask**/**mask**/**mask**/tpptickethandler/src/data/IncidentHandler.py", line 1, in <module>
    import BrowserHandler
ModuleNotFoundError: No module named 'BrowserHandler'

当我直接从 IncidentHandler.py 运行代码时,它按预期运行。

我意识到解决方案是模块化名称,所以我做了如下更改-

import BrowserHandler

import data.BrowserHandler

这现在可以从 api.py 使用,但是不能 IncidentHandler.py

使用

IncidentHandler.py中的新错误

Traceback (most recent call last):
  File "IncidentHandler.py", line 1, in <module>
    import data.BrowserHandler
ModuleNotFoundError: No module named 'data'

我可以看到我可能正在遵循典型的Python原则,但是面对这个问题是一个非常独特的挑战,到目前为止,我在互联网上还没有找到任何东西。有人可以协助我提供解决方案和/或下次如何更好地解决这个问题。

1 个答案:

答案 0 :(得分:0)

您正在尝试将模块组织在不同的文件夹下,这些文件夹是软件包。为了让python将文件夹识别为包,您需要在其下有一个 __ init __。py 文件,该文件是否为空都无关紧要,这将使python正确识别该文件夹作为包装

https://docs.python.org/3/tutorial/modules.html#packages

来自官方网站的示例

sound/                          Top-level package
      __init__.py               Initialize the sound package
      formats/                  Subpackage for file format conversions
              __init__.py
              wavread.py
              wavwrite.py
              aiffread.py
              aiffwrite.py
              auread.py
              auwrite.py
              ...
      effects/                  Subpackage for sound effects
              __init__.py
              echo.py
              surround.py
              reverse.py
              ...
      filters/                  Subpackage for filters
              __init__.py
              equalizer.py
              vocoder.py
              karaoke.py
              ...