Python环境(3):环境及包管理Conda+pypi
承接Python环境(2):安装及配置,此处记录环境及包管理,同时汇总一下常用的环境及包管理命令以便速查,包及仓库的基础概念附在后面。
环境Environment
多环境创建
不同的工作场景需要不同的工具,比如写爬虫和空间数据处理或者是机器学习甚至是深度学习,用的包就有很大的差别,或者有的时候Python的版本也不一致,有时候为了用别人写好的代码需要匹配别人的环境等等……这时候环境隔离的重要性就凸显出来了。根据不同的场景创建不同的环境,或者临时环境,能够减少包之间的冲突以及方便共享。因此,针对不同的工作,带不同的工具箱,比如我:
- 空间、矢量栅格处理新建一个环境
- 机器学习新建一个环境
- 深度学习新建一个环境
- 数据抓取新建一个环境
- ……
- 包括有时候用其他人的一套脚本,可以直接复刻一套他的环境,更快地上手运行他人的代码!
- Anaconda/Miniconda默认的环境安装在`
.\miniconda3\envs
目录下,在这里,每一个环境有一个单独的文件夹,切换环境的过程也就是进入不同的文件夹调用下运行脚本。每个环境对应一些包,分门别类,如果因为一些包或者误删把环境搞坏了,也可以直接删掉重建新环境而不影响base环境
Conda环境/包管理
现在安装包已经可以不需要设置国内镜像源(包的国内仓库和转发渠道),如有个别包或者包的某些版本在国内安不上,使用pip,或再切换梯子cmd安装即可。如果需要添加镜像源,如清华源conda,清华源pypi
以下可参考:
- 手册官网,API,清洁环境
- 关于环境的迁移共享,或者安装别人的环境配置,见Python环境(3):环境及包管理
环境管理命令
创建新环境,比如这里创建一个Python3.9版本的环境,取名为gis
1 | conda create -n gis python=3.9 |
查看当前所有的环境,以下一致,
1 | conda env list |
激活和退出环境,比如我这里有环境名为geo39
1 | conda activate gis |
删除环境gis,清洁环境内存,删掉一些缓存或不需要的版本文件
1 | conda remove --name gis --all |
Conda包管理命令
即针对某一个环境对环境内的包进行管理,安装包时如果不指定版本则为当前环境下可支持的最新版本
列出当前环境下所有的包
1 | conda list |
安装包,-c表示严格控制源来自Anaconda.org,
1 | conda install -c conda-forge geopandas |
查看某包的依赖信息建议看官网github说明./pkgs/geopandas.../info/index.json
更新包
1 | conda update geopandas |
删除包
1 | conda remove scipy |
pip包管理
总有些包是Conda安装不了的或者没有收纳的,这时候就需要通过pip进行安装,如果依旧直接命令不行,则可能需要下载文件进行安装,一种是在pythonlibs这里搜索下载,也可以在pypi官网搜索并下载文件安装
具体可以查看文档:https://pip.pypa.io/en/stable/cli/pip_install/
1 | py -m pip install SomePackage # latest version |
通过环境安装
1 | py -m pip install -r requirements.txt |
1 | # 通过文件或者github源码源文件安装 |
基础概念
包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
待续