python 内网镜像站_【环境搭建】Docker做Python环境版本控制

为了解决Python环境兼容性问题和数据存储的版本不匹配,本文介绍了如何使用Docker进行环境版本控制。通过在jupyter/datascience-notebook基础上构建镜像,并详细说明了在Windows环境下如何配置和使用该镜像,包括下载Anaconda的压缩包,配置环境变量,以及修正jupyter kernel路径确保正确运行。
摘要由CSDN通过智能技术生成

e3b34aedd84c1570ed890e0b0e456c99.png

问题背景

策略研发的python环境依赖众多的包,包与包,包与python以及conda的兼容性在生产环境中可能会冷不丁的冒出一个问题

  • conda在安装新包的时候会solve environment,使得有些包升级,有些包降级,带来了之前写的代码可能不可用
  • 数据以pickle的形式进行存储,这样新版本写的数据老版本(可能是集群的版本,升级涉及很多操作)无法读取

因此这里考虑版本的控制

注意事项

conda install命令会擅自更新依赖库的版本(如:pandas,numpy等)导致版本不兼容,因而建议使用pip进行安装,或者conda指定版本进行安装:conda install package_name=xxx.yy.zz

实际操作

这里利用docker来实现跨平台的环境统一:基础的镜像使用jupyter/datascience-notebook, 在此基础上构建自己的镜像:

FROM jupyter/datascience-notebook:14fdfbf9cfc1

USER root

RUN sed -i 's/archive.ubuntu.com/mirrors.163.com/' /etc/apt/sources.list
RUN apt-get update && 
    apt-get install -y --no-install-recommends fonts-arphic-gbsn00lp 
    cron vim rsync openssh-client && 
    apt-get clean && 
    rm -rf /var/lib/apt/lists/*

RUN service cron start

ENV NB_UID=1
RUN echo "$(id -nu $NB_UID) ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/notebook
RUN usermod -d /home/jovyan $(id -nu $NB_UID)

USER $NB_USER

RUN conda install -y --override-channels 
    -c pytorch 
    -c mosek 
    -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ 
    -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ 
    -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ 
    jupyter_contrib_nbextensions pandas cvxopt pytorch-cpu torchvision-cpu mosek lxml && 
    conda clean -tipsy

RUN npm config set registry https://registry.npm.taobao.org --global && 
    npm config set disturl https://npm.taobao.org/dist --global && 
    node /opt/conda/lib/python3.6/site-packages/jupyterlab/staging/yarn.js 
    config set registry https://registry.npm.taobao.org --global && 
    node /opt/conda/lib/python3.6/site-packages/jupyterlab/staging/yarn.js 
    config set disturl https://npm.taobao.org/dist --global && 
    jupyter labextension install -y --clean @jupyterlab/plotly-extension && 
    npm cache clean --force && 
    rm -rf $CONDA_DIR/share/jupyter/lab/staging && 
    rm -rf /home/$NB_USER/.cache/yarn

USER root
# TA-Lib
RUN wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz && 
    tar -xvzf ta-lib-0.4.0-src.tar.gz && 
    cd ta-lib/ && 
    ./configure --prefix=/usr && 
    make && 
    make install && 
    cd .. && rm -rf ta-lib ta-lib-0.4.0-src.tar.gz

USER $NB_USER
ARG JUPYTERHUB_VERSION=0.9.*
# lxml and psutil version constrainted by airflow
RUN conda install -y --override-channels 
    -c plotly 
    -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ 
    -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ 
    -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ 
    lxml=4.2.5 plotly-orca psutil=4.4.2 && 
    conda clean -tipsy
RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple 
    jupyterhub==$JUPYTERHUB_VERSION arctic tqdm ipynb cufflinks alphalens 
    pyfolio visdom pyecharts schedule TA-Lib bcolz bquery tushare plotly

# arctic python3 fix
RUN sed -i 's/compat=True/compat=True, encoding="latin1"/' 
    /opt/conda/lib/python3.6/site-packages/arctic/store/_version_store_utils.py

# orca
ADD google-chrome-stable_181211_amd64.deb /tmp/google-chrome-stable_181211_amd64.deb

USER root
RUN apt-get update && 
    apt-get install -y --no-install-recommends libgtk2.0-0 
    libgconf-2-4 libxtst6 lsb-release libappindicator3-1 xvfb && 
    apt-get clean && 
    rm -rf /var/lib/apt/lists/* && 
    dpkg -i /tmp/google-chrome-stable_181211_amd64.deb && 
    rm /tmp/google-chrome-stable_181211_amd64.deb && 
    mv /opt/conda/bin/orca /opt/conda/bin/orca_gui
ADD orca /opt/conda/bin/orca
RUN chown jovyan:users /opt/conda/bin/orca

USER $NB_UID

orca的安装需要下载orca和chrome到Dockerfile所在的目录,这里自行决定即可,不用的话把对应的部分删除即可(本文的另一个目的也是为了做备份所以贴的是我们完整的配置);

  • 构建镜像
docker build -t example:tag .           # 构建
docker push example:tag you.docker.hub  # 推送到远端仓库
  • 运行
#!/usr/bin/bash
if [ $# -lt 1 ]; then
    echo "Usage: bash $0 <port>"
    exit 1
fi
docker run -d 
    --name=dev-env 
    -u jovyan  # 这里可能是必要的,详见https://zhuanlan.zhihu.com/p/243231585
    --restart=unless-stopped 
    -p $1:8888 
    -v $PWD:/home/jovyan/work:rw 
    your.private.docker.hub/username/example:tag

关于Windows

对于金融数据而言,很多第三方数据仅提供Windows下的API,所以还需要针对WIndows也做一份版本控制的环境,为此这里的技术路线采用的是直接打包一个稳定可运行的环境然后使用的时候直接下载压缩包,解压;其中有些小问题要处理一下,如下:

  • 第一步:下载zip文件(OP打包好放在内网)放到安装位置,比如:D:Anaconda3
  • 第二步: 配置环境变量到Path(右键计算机/此电脑->属性->高级系统设置->环境变量->选中Path点编辑
    • 添加:D:Anaconda3、D:AnacondaaScripts、D:Anaconda3Librarybin
  • 第三步:由于环境的变化,kernel的路径也会变化,需要让jupyter找到正确的kernel路径
    • Step1: 首先打开Anaconda Prompt
    • Step2: 输入jupyter kernelspec list查看安装的内核和位置
    • Step3: 进入安装目录,打开kernel.jason, 查看python的编辑器的路径文件是否与安装路径一样,比如改为:"D:Anaconda3python.exe"
    • Step4: 刷新页面即可,如果还是不行的话可以重启jupyter notebook
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值