企业里为什么推荐使用conda来管理科学计算环境?

Conda生态介绍

Why Conda

What Conda

How to use

How to build

Future


Why Conda?

[图片上传失败...(image-c86151-1521694167709)]


企业里为什么推荐使用conda来管理科学计算环境?_第1张图片
image

痛点

  • 测试环境中往往需要多环境版本交差测试
  • 安装包过程中往往需要很多C库依赖(可能和系统冲突)
  • 不同业务方有不同的需求,没有统一的部署规范和标准
  • PE的时间很宝贵

conda的优势

  • 环境管理/隔离(pyenv)
  • 版本管理(pyenv)
  • 包管理工具(yum,apt,pip....)
  • 多软件管理(python,R,Scala,Java,c/c++)

What Conda?

三个名词:

  • Conda:
    一个开源的软件包管理系统和环境管理系统,用于安装多个版本的软件包及其依赖关系,并在它们之间轻松切换。(它为Python, R, Scala, Java, Javascript, C/ C++以及其他应用程序堆栈提供包管理.)
  • Anaconda
    Anaconda是一个 Python 发行版,主要用于科学计算和信号处理等领域,支持 Linux, Mac, Windows, 包含了众多流行的科学计算、数据分析等Python 包。
  • Miniconda
    Miniconda是一个小的“引导”版本,只包括conda,Python和它们所依赖的包。可以使用“conda install”命令从Continuum存储库中单独安装超过720个科学软件包及其依赖项。

总结:
Conda是一个可以为科学计算环境提供统一构建、发布、管理的系统.


How to use

  • 安装conda基础环境(anaconda/miniconda)
  • 配置conda本地环境
  • 执行conda相关操作(search/install/remove)

安装conda基础环境:

# 下载并安装miniconda
$ wget https://mirror.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-4.3.11-Linux-x86_64.sh

# 使用miniconda初始化conda环境,会安装一个默认的python版本
$ bash Miniconda3-4.3.11-Linux-x86_64.sh -b -p /export/biaoge/conda-test/python2.7

# 安装完成之后会在/export/biaoge/conda-test/python2.7目录下生成整个conda的相关目录结构,包括可执行文件、动态链接库等.

配置conda本地环境:

# 为了方便环境隔离,用户可以将conda的中的bin和lib目录追加到当前环境的PATH,和LD_LIBRARY_PATH环境
$ cd /export/biaoge/conda-test/python2.7
$ export PATH=$(pwd)/bin:$PATH
$ export LD_LIBRARY_PATH=$(pwd)/lib:$LD_LIBRARY_PATH

# 测试使用(miniconda3.4.3中包含的默认python版本)
$ python --version
Python 3.6.0 :: Continuum Analytics, Inc

配置conda本地环境:

# 查看默认的repos
$ conda config --show
.....
default_channels:
  - https://repo.continuum.io/pkgs/free
  - https://repo.continuum.io/pkgs/r
  - https://repo.continuum.io/pkgs/pro
.....
# 设置国内或本地私有源
$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/


执行conda基本操作:

# 切换到python2.7并测试numpy模块
$ conda install python=2.7 -y
$ conda install numpy -y 
$ python --version
Python 2.7.14 :: Anaconda, Inc.
$ python -c "import numpy as np;print(np.__version__)"
1.14.2
# 查找numpy相关的包
$ conda search numpy
# 卸载conda包
$ conda remove numpy

How to build

  • 准备conda build环境
  • 确认目标包/模块在源码中的依赖项
  • 创建conda包的元文件
  • 构建conda包

准备conda build环境:
注意:conda build环境默认包含在anaconda中,如果使用miniconda安装需要使用conda install conda-build -y进行环境构建。

# 安装conda基础环境
$ conda install conda-build -y


确认目标包/模块的依赖项:
以confluent-kafka为例:

# Requires Distributions:
- Python >= 2.7 or Python 3.x
- librdkafka >= 0.9.5 (latest release is embedded in wheels)

创建conda包的元文件:

$ mkdir confluent-kafka
$ touch confluent-kafka/build.sh
$ vim confluent-kafka/meta.yaml
{% set version="0.11.0" %}
package:
  name: confluent-kafka
  version: {{ version }}
source:
  git_url: https://github.com/confluentinc/confluent-kafka-python.git
  git_tag: v0.11.0
build:
  number: 0
  script: python setup.py install
requirements:
  build:
    - python
    - librdkafka
  run:
    - python
    - librdkafka

构建conda包:
注意:conda build过程中需要检测项目目录下的meta.yaml文件,如果在meta.yaml文件中的build区域找中无script,则需要检测build.sh脚本中的构建参数

# 测试构建(构建成功后有包的地址)
$ cd  confluent-kafka && conda build .

# 构建成功后可以在本地测试使用
$ conda install --use-local confluent-kafka -y
$ python -c "import  confluent_kafka"

# 本地测试通过后可上传到anaconda 私有仓库,也可同步到企业内部私有conda源,以供更多人使用

注意:细心的同学可以看到在依赖选项中有librdkafka包,需要使用同种方式优先构建。

Future

  • 推广conda在科学计算领域的使用(用户:运维、开发、测试、算法工程师)
  • 提炼并抽象科学计算领域的环境需求,丰富金融内部conda私有源
  • 结合现有系统+流程推动conda环境部署行为前置(谁用谁安装)
  • conda持续化构建和测试平台(自动构建+环境预测试)
  • conda+docker(解决异构和移植的问题)的融合

你可能感兴趣的:(企业里为什么推荐使用conda来管理科学计算环境?)