Ubuntu、Python、Weasyprint Docker镜像问题:venv依赖无法被调用
解决Docker中Python依赖无法加载的问题
问题背景
构建包含Ubuntu、Python和Weasyprint的Docker镜像时,requirements.txt内的依赖已安装到虚拟环境.venv,但运行main.py时触发ModuleNotFoundError: No module named 'sqlalchemy'——原因是运行时使用的是系统全局Python,未加载虚拟环境中的依赖。
两种可行解决方案
方案1:将依赖安装到系统全局
直接使用系统级pip安装依赖,无需虚拟环境,简化Dockerfile:
修改Dockerfile中安装依赖的部分:
# Install dependencies RUN echo Dockerfile :: Install dependencies RUN pip3 install -r requirements.txt
同时删除虚拟环境相关的冗余步骤:
- 删除
RUN apt-get install python3-venv -y - 删除
RUN python3 -m venv .venv、RUN . .venv/bin/activate、RUN .venv/bin/pip install -r requirements.txt
方案2:运行时使用虚拟环境
保留虚拟环境安装依赖的步骤,修改CMD确保运行时加载虚拟环境:
方式A:通过shell激活虚拟环境后运行
CMD ["/bin/bash", "-c", ". .venv/bin/activate && python3 ./main.py"]
方式B:直接调用虚拟环境内的Python解释器
CMD [".venv/bin/python3", "./main.py"]
注:原Dockerfile中
RUN . .venv/bin/activate无效,因为每个RUN指令对应独立的shell进程,环境变量不会跨进程继承;但你已经用.venv/bin/pip完成了依赖安装,只需确保运行时调用虚拟环境内的Python解释器即可。
内容的提问来源于stack exchange,提问作者Europa
相关产品推荐
相关产品推荐

