我知道这是一个普遍的问题,但是在网上搜索了大约一个小时之后,还没有解决方案。该代码在本地工作,但在Docker中出现此错误:
ModuleNotFoundError:没有名为“ src”的模块
无论我如何构造代码,这都使我发疯了b / c,我遇到了这个错误或找不到路径错误,但是无论哪种方式,我所做的事情都只是图表而已/
简而言之,我正在为一个不稳定的网关构建一个dockerized监视器,每隔几分钟测试一次网关主机是否仍可访问并且网关本身仍在工作。该网关。文件夹结构很简单:
monitor
- src
- api
- __init__
EmailManager.py
GatewayManager.py
CONTACT.py # contains email addresses
main.py
init 模块如下所示:
from src.api.EmailManager import EmailManager
from src.api.GatewayManager import GatewayManager
这两个类中的每一个都遵循相当标准的模式。以EmailManager为例:
class EmailManager(object):
def __init__(self, default_address):
def send_email()...
就我而言,这没什么特别的。 main.py包含MainClass和要运行的简单main函数。
from src.api.EmailManager import EmailManager
from src.api.GatewayManager import GatewayManager
from src.CONTACT import ADMIN_EMAIL
class MainClass:
def __init__(self):
self.em = EmailManager(default_address=ADMIN_EMAIL)
....
if __name__ == '__main__':
mc = MainClass()
def signal_handler(sig, frame):
print('Handle signal {signal}'.format(signal=sig))
mc.shutdown()
print("Register SIGTERM event handler")
signal.signal(signal.SIGTERM, signal_handler)
print("Start gateway monitor")
mc.run(minutes=1)
这在我的工作站上可以很好地工作,并且大致可以完成预期的工作。匹配的Dockerfile也非常简单:
FROM python:3.8-slim-buster
COPY config/requirements.txt .
COPY src /src
CMD 'python -m pip install --upgrade pip'
RUN pip install -r requirements.txt
CMD [ "python", "./src/main.py" ]
有人抛出ModuleNotFound错误。
将最后一行更改为
CMD [“ python”,“ -m”,“ ./src/main.py”]
我收到以下错误:
/ usr / local / bin / python:不支持相对模块名称
有什么主意如何构造这些类,以便它们在Docker中正常运行?
感谢您的帮助。
答案 0 :(得分:1)
树形结构有点令人困惑,但是在取消导入之后,您的文件夹结构应如下所示:
/absoloute_path/models/dtree
从那里,您的├── main.py
└── src
├── CONTACT.py
├── __init__.py
└── api
├── EmailManager.py
├── GatewayManager.py
└── __init__.py
看起来像这样(如您所愿):
main.py