python - 如何在模块中导入包
问题描述
我是 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
关于如何解决这个问题的任何想法?
解决方案
app/
它本身不是一个包——因为它不包含__init__
文件——。app/
是应用程序的根目录,而包的路径以lexer
. 所以,改变
from app.lexer.token.type import Type
至
from lexer.token.type import Type
推荐阅读
- php - 需要在 $this->request->data 对象中设置数据值以进行测试
- javascript - 有没有办法在用户登录后继续查看弹出模式?
- python - 从元组中提取字典值
- performance - HP Perf Center 每 n 秒开始新的迭代
- python - python检查str是否在对象列表中
- oauth-2.0 - (如何)使用 OpenID Connect(或不使用?)保护 Web API
- php - Laravel - $app->loadEnvironmentFrom('.env.testing') 方法不起作用
- sql-server - 使用 Visual Studio 自动化数据管道
- mongodb - 使用 3T Studio 将行插入 MongoDB
- python - Django:迁移期间的ValueError(如何修复???)