问题背景
策略研发的python环境依赖众多的包,包与包,包与python以及conda的兼容性在生产环境中可能会冷不丁的冒出一个问题conda在安装新包的时候会solve environment,使得有些包升级,有些包降级,带来了之前写的代码可能不可用
数据以pickle的形式进行存储,这样新版本写的数据老版本(可能是集群的版本,升级涉及很多操作)无法读取
因此这里考虑版本的控制
注意事项conda install命令会擅自更新依赖库的版本(如:pandas,numpy等)导致版本不兼容,因而建议使用pip进行安装,或者conda指定版本进行安装:conda install package_name=xxx.yy.zz
实际操作
这里利用docker来实现跨平台的环境统一:基础的镜像使用jupyter/datascience-notebook, 在此基础上构建自己的镜像:
FROMjupyter/datascience-notebook:14fdfbf9cfc1USERrootRUN sed -i 's/archive.ubuntu.com/mirrors.163.com/' /etc/apt/sources.listRUN 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 startENV NB_UID=1
RUN echo "$(id -nu $NB_UID)ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/notebookRUN usermod -d /home/jovyan $(id -nu $NB_UID)USER$NB_USERRUN 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 -tipsyRUN 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/yarnUSERroot# TA-LibRUN 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.gzUSER$NB_USERARG JUPYTERHUB_VERSION=0.9.*# lxml and psutil version constrainted by airflowRUN 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 -tipsyRUN 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 fixRUN sed -i 's/compat=True/compat=True, encoding="latin1"/' \ /opt/conda/lib/python3.6/site-packages/arctic/store/_version_store_utils.py# orcaADD google-chrome-stable_181211_amd64.deb /tmp/google-chrome-stable_181211_amd64.debUSERrootRUN 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_guiADD orca /opt/conda/bin/orcaRUN chown jovyan:users /opt/conda/bin/orcaUSER$NB_UID
orca的安装需要下载orca和chrome到Dockerfile所在的目录,这里自行决定即可,不用的话把对应的部分删除即可(本文的另一个目的也是为了做备份所以贴的是我们完整的配置);构建镜像
docker build -t example:tag . # 构建docker push example:tag you.docker.hub # 推送到远端仓库运行
#!/usr/bin/bashif [ $# -lt 1 ]; then
echo "Usage: bash$0"
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:\Anacondaa\Scripts、D:\Anaconda3\Library\bin
第三步:由于环境的变化,kernel的路径也会变化,需要让jupyter找到正确的kernel路径Step1:首先打开Anaconda Prompt
Step2: 输入jupyter kernelspec list查看安装的内核和位置
Step3:进入安装目录,打开kernel.jason, 查看python的编辑器的路径文件是否与安装路径一样,比如改为:"D:\\Anaconda3\\python.exe"
Step4: 刷新页面即可,如果还是不行的话可以重启jupyter notebook