dockerfile 安装miniconda

需求:

  • 一个docker 镜像中有多个程序要跑
  • 但是多个程序依赖的环境有冲突,所以安装一个miniconda

进程:

  • 先安装conda
RUN wget https://repo.anaconda.com/miniconda/Miniconda3-py38_23.1.0-1-Linux-x86_64.sh 
RUN bash Miniconda3-py38_23.1.0-1-Linux-x86_64.sh -p /opt/miniconda -b
RUN rm Miniconda3-py38_23.1.0-1-Linux-x86_64.sh
RUN cp /usr/local/bin/gunicorn /opt/miniconda/bin/
  • 安装好之后准备好安装子环境需要的yml文件
ENV PATH=/opt/miniconda/bin:${PATH}
RUN conda update -y conda
RUN conda init
RUN conda env create -f environment.yml
RUN rm -rf environment.yml
  • 上部代码中最关键的一个步骤就是 ENV PATH=/opt/miniconda/bin:${PATH}
  • 不然下面的init 等都跑不起来
  • 注意这个 p a t h 要和上面安装 m i n i c o n d a 的目录保持一致 \color{#FF0000}{注意这个path 要和上面安装miniconda 的目录保持一致} 注意这个path要和上面安装miniconda的目录保持一致

拓展:

  • 如果需要后续在dockerfile 中使用已经存在 conda 的镜像,并且在指定的环境下安装内容需要重新使用init
FROM hasconda-docker:laster
#指定环境 && 初始化 conda && 
RUN export PATH=/opt/miniconda/bin:${PATH} && conda init bash && source activate && conda activate smallEnv && pip install opencv-python==4.7.0.72
  • s o u r c e   a c t i v a t e \color{#FF0000}{source\ activate} source activate 这个行为可以在shell脚本开头处激活虚拟环境,如果直接使用 conda activate smallEnv 会报错, C o m m a n d N o t F o u n d E r r o r :   Y o u r   s h e l l   h a s   n o t   b e e n   p r o p e r l y   c o n f i g u r e d   t o   u s e   ′ c o n d a   a c t i v a t e ′ \color{#FF0000}CommandNotFoundError:\ Your\ shell\ has\ not\ been\ properly\ configured\ to\ use\ 'conda\ activate' CommandNotFoundError: Your shell has not been properly configured to use conda activate
  • 在这里插入图片描述
  • 注意path 的设置尤其重要,不然source activate 会失败,因为 activate 是处于miniconda/bin 下的一个文件
Traceback (most recent call last): File "/home/blw/anaconda3/envs/myenv/lib/python3.11/site-packages/osgeo/__init__.py", line 30, in swig_import_helper return importlib.import_module(mname) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/blw/anaconda3/envs/myenv/lib/python3.11/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "<frozen importlib._bootstrap>", line 1204, in _gcd_import File "<frozen importlib._bootstrap>", line 1176, in _find_and_load File "<frozen importlib._bootstrap>", line 1147, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 676, in _load_unlocked File "<frozen importlib._bootstrap>", line 573, in module_from_spec File "<frozen importlib._bootstrap_external>", line 1233, in create_module File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed ImportError: /home/blw/anaconda3/envs/myenv/lib/python3.11/site-packages/osgeo/../../../libgdal.so.36: undefined symbol: sqlite3_total_changes64 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/data2/blw/code/RGB_TAKE.py", line 6, in <module> from osgeo import gdal File "/home/blw/anaconda3/envs/myenv/lib/python3.11/site-packages/osgeo/__init__.py", line 35, in <module> _gdal = swig_import_helper() ^^^^^^^^^^^^^^^^^^^^ File "/home/blw/anaconda3/envs/myenv/lib/python3.11/site-packages/osgeo/__init__.py", line 32, in swig_import_helper return importlib.import_module('_gdal') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/blw/anaconda3/envs/myenv/lib/python3.11/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ModuleNotFoundError: No module named '_gdal'在我的虚拟环境中出现了这个问题
03-16
<think>嗯,用户遇到了Python虚拟环境中osgeo.gdal模块加载失败的问题,报错是ModuleNotFoundError或者ImportError,特别是提到sqlite3_total_changes64。我需要帮他们解决这个问题。首先,我得分析可能的原因。 首先,用户可能是在虚拟环境中安装GDAL的方式不对。GDAL作为地理数据处理库,安装起来有时候比较麻烦,尤其是在Windows上。常见的问题包括依赖项缺失或者版本不兼容。用户提到使用了Anaconda,可能他们尝试了conda install,但可能没有指定正确的频道或者版本。 然后,错误信息中提到了sqlite3_total_changes64,这可能是SQLite版本的问题。Python 3.11默认使用的SQLite版本可能与GDAL模块需要的版本不兼容。需要检查系统中安装的SQLite版本,或者Python是否链接了正确的SQLite库。 接下来,我需要考虑解决方案。首先建议使用conda安装,因为conda可以处理二进制依赖,可能会更顺利。如果不行,可能需要从第三方源下载预编译的whl文件,比如Gohlke的库,但要注意Python版本和系统架构是否匹配。另外,确保虚拟环境正确激活,并且安装时没有权限问题。 另外,用户可能混合使用了pip和conda,这有时会导致依赖冲突。应该建议他们创建一个干净的虚拟环境,优先使用conda安装GDAL,或者全部使用pip,但要注意来源的兼容性。 还需要检查Python版本是否为3.11,因为某些第三方包可能尚未支持最新版本,这时候可能需要降级Python到3.10或更早的版本,或者寻找兼容的GDAL版本。 最后,如果所有方法都失败,可能需要手动编译GDAL,但这对于普通用户来说比较复杂,所以作为最后的选择。或者建议使用Docker容器来避免环境配置的问题。</think>### 分步解决方案:Python虚拟环境中osgeo.gdal模块加载失败问题 #### 1. 确认环境隔离状态 - 使用以下命令检查当前虚拟环境路径: ```bash python -c "import sys; print(sys.executable)" ``` 确保输出路径包含虚拟环境目录(如`venv`或`.venv`),而非Anaconda基础环境路径[^1] #### 2. 优先尝试Conda安装方案 ```bash conda install -c conda-forge gdal=3.6.3 ``` * 特别说明:强制指定`conda-forge`频道可避免依赖冲突 * 版本建议:Python 3.11建议搭配GDAL 3.6.x系列 #### 3. 解决SQLite3兼容性问题 ```bash conda install -c conda-forge sqlite=3.37.0 ``` * 关键作用:修复`sqlite3_total_changes64`符号缺失错误 * 验证命令: ```python import sqlite3 print(sqlite3.sqlite_version) # 应显示 >=3.37.0 ``` #### 4. 备选方案:Windows预编译包 从Unofficial Windows Binaries下载对应版本: ```bash pip install https://download.lfd.uci.edu/pythonlibs/archived/GDAL-3.6.3-cp311-cp311-win_amd64.whl ``` * 注意点: - 必须匹配Python版本(cp311=Python3.11) - 系统架构需对应(win32/amd64) - 需要预先安装Microsoft Visual C++ Redistributable #### 5. 环境变量配置验证 ```bash python -c "from osgeo import gdal; print(gdal.__version__)" ``` * 预期输出:显示GDAL版本号(如3060300) * 异常处理:若提示DLL加载失败,需手动添加PATH: ```python import os os.environ['PATH'] = r'C:\path\to\gdal\bin;' + os.environ['PATH'] ``` #### 6. 终极解决方案:Docker容器化 ```dockerfile FROM continuumio/miniconda3 RUN conda install -c conda-forge gdal=3.6.3 python=3.11 ``` * 优势:完全隔离系统环境依赖 * 执行命令: ```bash docker build -t gdal-env . docker run -it gdal-env python -c "from osgeo import gdal" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值