环境描述:
首先在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/*

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

