Python环境(3):环境及包管理Conda+pypi

承接Python环境(2):安装及配置,此处记录环境及包管理,同时汇总一下常用的环境及包管理命令以便速查,包及仓库的基础概念附在后面。

环境Environment

多环境创建

不同的工作场景需要不同的工具,比如写爬虫和空间数据处理或者是机器学习甚至是深度学习,用的包就有很大的差别,或者有的时候Python的版本也不一致,有时候为了用别人写好的代码需要匹配别人的环境等等……这时候环境隔离的重要性就凸显出来了。根据不同的场景创建不同的环境,或者临时环境,能够减少包之间的冲突以及方便共享。因此,针对不同的工作,带不同的工具箱,比如我:

  • 空间、矢量栅格处理新建一个环境
  • 机器学习新建一个环境
  • 深度学习新建一个环境
  • 数据抓取新建一个环境
  • ……
  • 包括有时候用其他人的一套脚本,可以直接复刻一套他的环境,更快地上手运行他人的代码!
  • Anaconda/Miniconda默认的环境安装在`.\miniconda3\envs目录下,在这里,每一个环境有一个单独的文件夹,切换环境的过程也就是进入不同的文件夹调用下运行脚本每个环境对应一些包,分门别类,如果因为一些包或者误删把环境搞坏了,也可以直接删掉重建新环境而不影响base环境

Conda环境/包管理

现在安装包已经可以不需要设置国内镜像源(包的国内仓库和转发渠道),如有个别包或者包的某些版本在国内安不上,使用pip,或再切换梯子cmd安装即可。如果需要添加镜像源,如清华源conda,清华源pypi

以下可参考:

环境管理命令

创建新环境,比如这里创建一个Python3.9版本的环境,取名为gis

1
2
3
conda create -n gis python=3.9
# 基于base环境安装一个新环境
conda create --name base2 --clone base

查看当前所有的环境,以下一致,

1
2
3
4
conda env list
conda info --envs
# 查看当前环境的信息:配置、路径、channels及缓存等
conda info

激活和退出环境,比如我这里有环境名为geo39

1
2
3
conda activate gis
conda activate base
conda deactivate

删除环境gis,清洁环境内存,删掉一些缓存或不需要的版本文件

1
2
3
4
conda remove --name gis --all
# 针对当前环境运行
conda clean -a
conda clean -i #清除包索引

Conda包管理命令

针对某一个环境对环境内的包进行管理,安装包时如果不指定版本则为当前环境下可支持的最新版本

列出当前环境下所有的包

1
conda list

安装包,-c表示严格控制源来自Anaconda.org,

1
2
3
4
conda install -c conda-forge geopandas
conda install -c geopandas
conda install geopandas
conda install scipy=0.15.0

查看某包的依赖信息建议看官网github说明./pkgs/geopandas.../info/index.json

更新包

1
2
3
4
conda update geopandas
# 更新系统环境包,慎用,一般出现bug可以考虑
conda update conda
conda update anaconda

删除包

1
2
conda remove scipy
conda remove scipy numpy

pip包管理

总有些包是Conda安装不了的或者没有收纳的,这时候就需要通过pip进行安装,如果依旧直接命令不行,则可能需要下载文件进行安装,一种是在pythonlibs这里搜索下载,也可以在pypi官网搜索并下载文件安装

具体可以查看文档:https://pip.pypa.io/en/stable/cli/pip_install/

1
2
3
4
py -m pip install SomePackage            # latest version
py -m pip install SomePackage==1.0.4 # specific version
py -m pip install 'SomePackage>=1.0.4' # minimum version
pip install Sonepackage

通过环境安装

1
py -m pip install -r requirements.txt
1
2
3
4
# 通过文件或者github源码源文件安装
py -m pip install D:\...\whl
py -m pip install SomeProject@http://my.package.repo/SomeProject-1.2.3-py33-none-any.whl
py -m pip install SomeProject@http://my.package.repo/1.2.3.tar.gz

基础概念

包Package

关于这块之前也写过一点Python中的类、模块、包

模块Modules:一个.py文件就构成了一个模块,模块名即为去掉后缀之后的名。模块包含内置模块、标准模块以及第三方模块

:一个包含__init__.py文件(包的标识文件)+若干子包+若干模块的文件夹,文件夹名字即为包名,包的位置位于Lib文件夹下,三方包位于site-packages

  • 初始安装Python自带的包是内置的包,不需要额外安装即可调用、更多的是第三方包,个人或者团体或社区各自开发和维护的包,需要安装
  • Python的巨大优势即在于可拓展性和便捷,有大量的第三方包可供使用。另外,、我们也可以自己写模块和包用于调用,也可以发布自己的包到包仓库供别人使用,包默认都托管在Github上
  • 开源社区的力量很强大,如这里就列出了大量GIS相关的可用的包Python×GIS

但是,由于不同的包维护的群体(数量/质量)不一致,因此导致了不同的包更新频率和问题解决的速度都不一样,而不同的包之间又存在相互依赖关系,这就容易导致常见的Inconsistency问题,即由于包的版本不一致会引发错误,尤其是当包进行大版本更新,如2.1.x-2.2.x甚至从2.x->3.x,代码运行就可能出错

这也就是Conda; Conda forge等包仓库、环境管理工具出现的原因。因此除了尽量选择维护快优化得比较好的包之外,还可以优先通过Conda等工具进行包管理,下面就看一下包仓库。

包仓库repository

在写代码过程需要用到很多包,因此如何查找安装和管理包,就是接下来需要考虑的问题,这些都有人帮我们做好了。

  • 官方提供的最完整的包仓库(PyPI)-The Python Package Index ,任何人都可以在上面发布自己写的包,安装完Python或者conda都会自动安装pypi。如下附图我们可以搜索并查看包的主页及各种说明文档,包括安装方式,通过pypi安装的命令默认为pip install **
  • Conda:一个在pip基础上更进一步维护和之后的开源包和环境管理系统(可以理解为有人做了一层筛选和把关)。可在 Windows、macOS、Linux上运行。Conda 可以快速安装、运行和更新软件包及其依赖项。Conda 在本地计算机上轻松创建、保存、加载和切换环境。它是为 Python 程序创建的,但它可以打包和分发任何语言的软件(Python, R, Ruby, Lua, Scala, Java, JavaScript, C/ C++, Fortran, and more)。包检索的地址anaconda
  • Conda-forge文档,为什么选择Conda forge?说明,在Anaconda的基础上进一步有社区管理的包仓库,目前安装包的顺序是Conda forge; Anaconda(即Conda默认); pypi
1
conda config --add channels conda-forge

问题debug

待续