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/*

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


相关推荐
心静财富之门33 分钟前
Flask 详细讲解 + 实战实例(零基础可学)
后端·python·flask
架构师老Y41 分钟前
003、Python Web框架深度对比:Django vs Flask vs FastAPI
前端·python·django
疯狂成瘾者2 小时前
语义分块提升RAG检索精度
python
小陈工4 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
A__tao8 小时前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
研究点啥好呢8 小时前
Github热门项目推荐 | 创建你的像素风格!
c++·python·node.js·github·开源软件
迷藏4948 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
功德+n9 小时前
Linux下安装与配置Docker完整详细步骤
linux·运维·服务器·开发语言·docker·centos
明日清晨9 小时前
python扫码登录dy
开发语言·python
bazhange9 小时前
python如何像matlab一样使用向量化替代for循环
开发语言·python·matlab