docker容器内部安装python和numpy的方法

环境描述:

首先在linux的路径下存放了python脚本,路径如下:/data1/nfs/data/lifesci-ststem-moe-pvc-6958cbf5-9501-4d01-9808-0b53df73cab0/moe2024.0601/bin/epitope/sequence这个目录为执行目录。

在当前目录下执行命令行:python3 /data1/nfs/data/lifesci-ststem-moe-pvc-6958cbf5-9501-4d01-9808-0b53df73cab0/moe2024.0601/bin/epitope/sequence/generate_peptides_fasta.py -l 10 -n 100 -m diverse -p 12 --avoid C -s 42 -o /data1/nfs/data/lifesci-ststem-moe-pvc-6958cbf5-9501-4d01-9808-0b53df73cab0/moe2024.0601/bin/epitope/sequence/output2.fasta,能够运行该脚本并得到输出文件。

Java程序运行在docker容器里面,yml文件指定执行目录为:/opt/moe/moe2024.0601/bin/,将实际执行目录挂载到容器的执行目录。

遇到的问题:

第一、首先在linux的执行目录下运行命令,报错了:File "/data1/nfs/data/lifesci-ststem-moe-pvc-6958cbf5-9501-4d01-9808-0b53df73cab0/moe2024.0601/bin/epitope/sequence/generate_peptides_fasta.py", line 3, in <module> import numpy as np ,python文件里用到了numpy 包,但实际没有安装。

使用命令安装:pip3 install numpy

成功运行。Python命令调试完毕,开始在Java程序里面拼接参数路径并调用该命令:

这里又报了numpy 找不到的错。问题就出在这里:
Linux 主机上 Python 已经装了 numpy,
但是容器里的 Python 和宿主机的 Python 是两个环境,容器内的 Python 环境并没有装 numpy ,
即使这两个目录通过挂载指向同一个文件系统路径(/data1/... ↔ /opt/moe/...)所以容器里报错 ModuleNotFoundError: No module named 'numpy'。

环境 路径 状态
宿主机(Linux 本机) /data1/nfs/data/.../epitope/sequence ✅ Python 有 numpy
容器(Java 运行环境) /opt/moe/moe2024.0601/bin/epitope/sequence ❌ Python 没有 numpy

Python 的包(例如 numpy)是安装在 Python 环境自身的 site-packages 目录下的。

例如:/usr/lib/python3.9/site-packages/numpy

这类路径在宿主机和容器中往往不同,也不会自动挂载到一起。

所以容器看不到宿主机安装的库。

这里有两种方法解决:

方法一:在容器内部安装 numpy

进入容器:

java 复制代码
docker exec -it <your_container_id> bash

然后执行:

java 复制代码
pip3 install numpy

如果容器的 Python 环境没有 pip:

java 复制代码
apt-get update && apt-get install -y python3-pip
pip3 install numpy

安装完成后,再执行:

java 复制代码
python3 -c "import numpy; print(numpy.__version__)"

确认容器内能正确导入 numpy。

缺点是一旦这个容器被销毁并重新创建(比如重启 Pod、重新部署镜像),

那些你在容器内安装的 Python 包(例如 numpy)就会全部消失。

因为容器的文件系统是临时的、可丢弃的层。执行pip install numpy

安装实际上写入容器层(镜像运行时的可写层)。

当容器销毁时,这个层就没了。

下次启动相同镜像时,相当于"全新环境",什么也没有了。

方法二:在镜像里预装 numpy

在 Dockerfile 里添加命令:

java 复制代码
RUN apt-get update && \
    apt-get install -y python3 python3-pip && \
    pip3 install --no-cache-dir numpy && \
    apt-get clean && rm -rf /var/lib/apt/lists/*

可以看到日志文件已经生成:


相关推荐
Weigang2 小时前
用 LlamaIndex 做 RAG 前,先把 Reader、Index、Retriever 的边界写清楚
人工智能·python·开源
潘正翔2 小时前
docker基础_镜像使用
linux·运维·服务器·docker·容器·centos·devops
小九九的爸爸2 小时前
前端入门Agent开发,掌握这些Python数据基础就够啦
python·agent
风之所往_2 小时前
Python 3.9 新特性全面总结
python
W是笔名2 小时前
python___容器类型的数据___序列
开发语言·python
aqi002 小时前
15天学会AI应用开发(十一)从TXT文件构建RAG知识库
人工智能·python·大模型·ai编程·ai应用
江湖有缘2 小时前
Lunalytics部署指南:使用Docker快速搭建私有监控面板
运维·docker·容器
火星校尉2 小时前
一场数据基建与消费场景的跨界实验
java·前端·数据库·python·php
Sam09272 小时前
【AI 算法精讲 14】TF-IDF:词频与逆文档频率
人工智能·python·算法·ai