首页 > 解决方案 > 如何在模块中导入包

问题描述

我是 Python 新手,我尝试构建我的 Python 应用程序。
给定以下目录结构:

app  
 ┣ lexer  
 ┃ ┣ token  
 ┃ ┃ ┣ token.py  
 ┃ ┃ ┣ type.py  
 ┃ ┃ ┗ __init__.py  
 ┃ ┗ __init__.py  
 ┣ test  
 ┃ ┣ lexer  
 ┃ ┃ ┣ token   
 ┃ ┃ ┃ ┣ test_token.py  
 ┃ ┃ ┃ ┗ __init__.py  
 ┃ ┃ ┗ __init__.py   
 ┃ ┣ test_app.py  
 ┃ ┗ __init__.py   
 ┗ app.py  

现在,应用程序使用以下命令执行:

pyhton -m app

当我尝试使用执行应用程序时

python -m .\app.py

引发以下错误:

Relative module names not supported.

单元测试正在使用:

python -m unittest

这工作正常,没有问题。现在,我正在尝试使用导入token / type.py文件中的app.py文件。

这个文件的内容是:

from enum import Enum, unique

@unique
class Type(Enum):
    UNKNOWN = 1
    EOF     = 2

文件中添加了以下导入语句app.py

from app.lexer.token.type import Type

现在运行应用程序会产生以下错误:

Traceback (most recent call last):
  File "C:\Python38\lib\runpy.py", line 193, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Python38\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "C:\DEV\DEMO.ONE\app\app.py", line 17, in <module>
    from app.lexer.token.type import Type
  File "C:\DEV\DEMO.ONE\app\app.py", line 17, in <module>
   from app.lexer.token.type import Type
ModuleNotFoundError: No module named 'app.lexer'; 'app' is not a package

关于如何解决这个问题的任何想法?

标签: python

解决方案


app/它本身不是一个包——因为它不包含__init__文件——。app/是应用程序的根目录,而包的路径以lexer. 所以,改变

from app.lexer.token.type import Type

from lexer.token.type import Type

推荐阅读