我有一个具有以下目录结构的Flask应用程序:
├── README.md
├── __init__.py
├── constants.py
├── businesspackage
│ ├── README.md
│ ├── __init__.py
│ ├── __pycache__
│ ├── detection
│ ├── flagging_spec.txt
│ └── tests
├── requirements.txt
├── run.py
└── tests
├── __init__.py
├── __pycache__
└── test_api.py
在detection
__init__.py
中,我已导入必要的类,以便我可以从该顶级模块导入类,而不是需要提供完整路径模块内的每个.py
文件。
我正在尝试从detection
内部run.py
导入一些类,但遇到以下错误:当我尝试使用{{1从顶级目录运行Flask应用程序时}}:
python3 run.py
在这里阅读了一些其他问题后,它建议我从相对导入更改为绝对导入。但是,如果我在 Traceback (most recent call last):
File "run.py", line 9, in <module>
from .businesspackage.detection import AdsDetection
SystemError: Parent module '' not loaded, cannot perform relative import
中尝试以下导入:
run.py
然后我可以在没有导入错误的情况下运行我的Flask服务器,但是,我的导入会中断为测试运行器。我使用 from businesspackage.detection import AdsDetection
命令运行测试,使用鼻子1.3.7。如何定义我的导入,以便它们适用于Flask服务器和鼻子测试?
编辑:
nosetests
如下:
businesspackage.__init__.py
答案 0 :(得分:1)
因此,出于一些奇怪的原因,我在删除基级目录中的__init__.py
文件后设法让绝对导入工作:即我的目录结构如下所示:
├── README.md
├── __init__.py
├── constants.py
├── businesspackage
│ ├── README.md
│ ├── __init__.py
│ ├── __pycache__
│ ├── detection
│ ├── flagging_spec.txt
│ └── tests
├── requirements.txt
├── run.py
└── tests
├── __init__.py
├── __pycache__
└── test_api.py
我想在看到这里的一个答案之后我应该试一试:Python imports for tests using nose - what is best practice for imports of modules above current package。所以现在,我的所有包都使用绝对导入。