对于气象常用的Python库有一个简要的整理,主要是方便自己一键式的在不同的平台上安装常用的库。过去,依赖于pip或conda install package_name 耗时耗力,且各个库的版本号可能会存在依赖关系的冲突,往往顾此失彼。后来深入使用conda,发现依赖于导出和导入开发环境yml文件能够解决这个问题。
依赖的Python分发版本主要是Ananconda,要是觉得这个包过于庞大了。可以精简一些,只安装Miniconda也行。
这样,安装好后就能有一个基本的Python环境,在这里推荐Python3.6 以上的版本。而Python的编辑器推荐:Sublime Text3或者Pycharm,前者可以免费使用,非注册版本偶尔会提醒购买,但不影响使用,后者可以下载教育版,非商业用途,是免费使用。至于其他的还有VS Code,也是非常不错的。
Anaconda下载链接:https://www.continuum.io/downloads
Miniconda下载链接:https://docs.conda.io/en/latest/miniconda.html
前些日子,Anaconda的高校镜像库基本都关停了(清华、中科大、南大),紧接着国内的腾讯源也不能使用了。最近清华源重新恢复了(2019-06-15),相关的~/.condarc的配置文件可以按照如下命令添加。
命令添加:
# 添加清华的Anaconda常用源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
.
代码语言:javascript复制# 附加库的源
# Conda Forge
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
# msys2
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
# bioconda
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
#menpo
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo/
# pytorch
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud//pytorch/
另外一种方法修改~/.condarc的配置文件:
vim ~/.condarc
# 按ESC跳到命令模式,然后
# :wq 保存文件并退出vi.
# q: 不保存文件,退出vi.
代码语言:javascript复制channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud//pytorch/
- esri
- defaults
当Anaconda或者Miniconda安装好了,且在~/.bashrc或~/.bash_profile或~/.zshrc环境变量配置文件中添加了Python3.6 的路径了,就可以使用了,这也是一个最基本的Base开发环境。
主要是基于macOS这个平台为例来说一下(Win/Linux类似):
1.创建新的开发环境
conda create --name <envname> python=<version> <optional dependencies>
例如,要创建一个atmpy的环境,Python开发环境要求是3.7版本:
conda create -n atmpy python=3.7
若要在当前目录下创建,则使用
conda create -p <envname> python=<version> <optional dependencies>
2.查看目前拥有的开发环境
conda info --envs
或者
conda env list
3.激活开发环境
conda activate <envname>
上面的例子,conda activate atmpy
4.退出开发环境
conda deactivate
5.复制现有的开发环境
conda create --name <envname> --clone <existing_env>
例如,把已经创建atmpy开发环境进行复制:
conda create --name atmpy_copy --clone atmpy
6.删除已经创建的开发环境
conda remove --name <envname> --all
例如,删除之前复制的开发环境,
conda remove --name atmpy_copy --all
7.导出和导入开发环境的yml文件
导出conda env export > environment.yml
导入conda env create -f environment.yml
导出和导入都会自动帮你处理好pip中的依赖,如果是库出现了冲突,直接把版本号删除就行了,而pip中无法在线安装的,会提示警告,之后可以依据python setup.py install 手动安装。最后,yml文件可以利用name命名导入的环境,以及依赖的源,prefix指定新建的环境安装的位置。在此,我提供了两个自己常用的Python气象库yml文件。有了它,就可以一键式安装了,妈妈再也不担心也删了装,装了删。但最重要的是自己写的代码和数据集的有一个云端自动备份,且能够保存版本,这里推荐Dropbox,通过推荐新用户的办法可以扩展到18GB左右,存点核心数据和代码不成问题。
人生苦短,我用Python
8.YML库一览
YML文件下载:https://box.nju.edu.cn/f/c4220903c4d244fb9bed/
代码语言:javascript复制name: atmpy
channels:
- conda-forge
- esri
- defaults
dependencies:
- alabaster=0.7.12=py36_0
- appnope=0.1.0=py36_0
- arcgis=1.4.1=py36h9149653_1
- asn1crypto=0.24.0=py36_0
- babel=2.6.0=py36_0
- backcall=0.1.0=py_0
- backports=1.0=py36_1
- backports.os=0.1.1=py36_0
- basemap=1.2.0=py36h0acbc05_0
- blas=1.0=mkl
- bleach=2.1.3=py_0
- bokeh=0.12.15=py36_0
- boost=1.66.0=py36_1
- boost-cpp=1.66.0=1
- bottleneck=1.2.1=py36_1
- bzip2=1.0.6=1
- ca-certificates=2019.3.9=hecc5488_0
- cairo=1.14.10=0
- cartopy=0.16.0=py36_0
- certifi=2019.3.9=py36_0
- cf_units=1.2.0=py36_0
- cffi=1.11.4=py36h342bebf_0
- chardet=3.0.4=py36h96c241c_1
- click=6.7=py_1
- click-plugins=1.0.3=py36_0
- cloudpickle=0.5.2=py_0
- conda=4.6.14=py36_0
- conda-env=2.6.0=h36134e3_0
- cryptography=2.1.4=py36h842514c_0
- curl=7.59.0=1
- cycler=0.10.0=py36_0
- cytoolz=0.9.0.1=py36_0
- dask=0.17.2=py_0
- dask-core=0.17.2=py_0
- decorator=4.3.0=py_0
- defusedxml=0.6.0=py_0
- descartes=1.1.0=py_1
- distributed=1.21.6=py36_0
- docutils=0.14=py36hbfde631_0
- entrypoints=0.2.3=py36_1
- eofs=1.3.0=py36_0
- expat=2.2.5=0
- fontconfig=2.12.6=0
- freetype=2.8.1=0
- freexl=1.0.5=0
- gdal=2.2.2=py36hd505dc6_1
- geos=3.6.2=h0a44026_1004
- geotiff=1.4.2=1
- gettext=0.19.8.1=0
- giflib=5.1.4=0
- glib=2.55.0=0
- h5netcdf=0.5.1=py_0
- hdf4=4.2.13=0
- hdf5=1.10.1=2
- heapdict=1.0.0=py36_0
- html5lib=1.0.1=py_0
- icu=58.2=0
- idna=2.6=py36h8628d0a_1
- imagesize=1.1.0=py36_0
- importlib_metadata=0.9=py36_0
- intel-openmp=2018.0.0=8
- ipykernel=4.8.2=py36_0
- ipython=6.3.1=py36_0
- ipython_genutils=0.2.0=py36_0
- ipywidgets=7.2.1=py36_1
- iris=2.0.0=py36_2
- iris-sample-data=2.1.0=py_0
- jedi=0.12.0=py36_0
- jinja2=2.10=py36_0
- jpeg=9b=2
- json-c=0.12.1=0
- jsonschema=2.6.0=py36_1
- jupyter=1.0.0=py_1
- jupyter_client=5.2.3=py36_0
- jupyter_console=5.2.0=py36_0
- jupyter_core=4.4.0=py_0
- kealib=1.4.7=4
- keyring=19.0.1=py36_0
- kiwisolver=1.0.1=py36_1
- krb5=1.14.6=0
- libcurl=7.61.0=hf30b1f0_0
- libcxx=4.0.1=h579ed51_0
- libcxxabi=4.0.1=hebd6815_0
- libdap4=3.19.1=h3d3e54a_0
- libedit=3.1=hb4e282d_0
- libffi=3.2.1=h475c297_4
- libgcc=4.8.5=hdbeacc1_10
- libgdal=2.2.2=h3559a57_1
- libgfortran=3.0.1=h93005f0_2
- libiconv=1.15=hdd342a3_7
- libkml=1.3.0=6
- libnetcdf=4.4.1.1=hdf03fd4_8
- libpng=1.6.34=0
- libpq=10.3=hf30b1f0_0
- libsodium=1.0.16=0
- libspatialindex=1.8.5=h2c08c6b_2
- libspatialite=4.3.0a=19
- libssh2=1.8.0=2
- libtiff=4.0.9=hcb84e12_1
- libxml2=2.9.8=h2866646_0
- libxslt=1.1.32=0
- locket=0.2.0=py36_1
- lxml=4.2.1=py36_0
- mapclassify=2.0.1=py_0
- markupsafe=1.0=py36_0
- matplotlib=2.2.2=py36_1
- mistune=0.8.3=py_0
- mkl=2018.0.2=1
- mkl_fft=1.0.1=py36_1
- mkl_random=1.0.1=py36_0
- msgpack-python=0.5.6=py36_0
- munch=2.3.1=py_0
- nbconvert=5.4.1=py36_3
- nbformat=4.4.0=py36_0
- ncurses=6.0=hd04f020_2
- notebook=5.4.1=py36_0
- numpy=1.14.2=py36ha9ae307_1
- numpydoc=0.9.1=py_0
- olefile=0.45.1=py36_0
- openjpeg=2.3.0=2
- openssl=1.0.2r=h1de35cc_0
- owslib=0.16.0=py_0
- packaging=17.1=py_0
- pandas=0.22.0=py36_0
- pandoc=2.1.3=0
- pandocfilters=1.4.1=py36_0
- parso=0.2.0=py_0
- partd=0.3.8=py36_0
- path.py=12.0.1=py_0
- patsy=0.5.0=py36_0
- pcre=8.41=1
- pexpect=4.5.0=py36_0
- pickleshare=0.7.4=py36_0
- pillow=5.1.0=py36_0
- pint=0.9=py36_2
- pixman=0.34.0=1
- poppler=0.61.1=3
- poppler-data=0.4.8=0
- proj4=4.9.3=h3f1bf9d_7
- prompt_toolkit=1.0.15=py36_0
- psutil=5.4.5=py36_0
- psycopg2=2.7.4=py36_0
- ptyprocess=0.5.2=py36_0
- pycosat=0.6.3=py36hee92d8f_0
- pycparser=2.18=py36h724b2fc_1
- pyepsg=0.3.2=py36_0
- pygments=2.2.0=py36_0
- pyke=1.1.1=py36_0
- pyopenssl=17.5.0=py36h51e4350_0
- pyparsing=2.2.0=py36_0
- pyqt=5.6.0=py36_5
- pysal=1.14.3=py36_0
- pyshp=1.2.12=py_0
- pysocks=1.6.7=py36hfa33cec_1
- python=3.6.5=1
- python-dateutil=2.7.2=py_0
- python.app=2=py36h54569d5_7
- pytz=2018.4=py_0
- pyyaml=3.12=py36_1
- pyzmq=17.0.0=py36_4
- qt=5.6.2=h9e3eb04_4
- qtconsole=4.3.1=py36_0
- readline=7.0=hc1231fa_4
- requests=2.18.4=py36h4516966_1
- rtree=0.8.3=py36_0
- ruamel_yaml=0.15.35=py36h1de35cc_1
- scipy=1.0.1=py36hcaad992_0
- send2trash=1.5.0=py_0
- setuptools=38.4.0=py36_0
- shapely=1.6.4=py36h2e8a847_1000
- simplegeneric=0.8.1=py36_0
- sip=4.18=py36_1
- six=1.11.0=py36h0e22d5e_1
- snowballstemmer=1.2.1=py36h6c7b616_0
- sortedcontainers=1.5.9=py36_0
- sphinx=2.0.1=py_0
- sphinxcontrib-applehelp=1.0.1=py_0
- sphinxcontrib-devhelp=1.0.1=py_0
- sphinxcontrib-htmlhelp=1.0.2=py_0
- sphinxcontrib-jsmath=1.0.1=py_0
- sphinxcontrib-qthelp=1.0.2=py_0
- sphinxcontrib-serializinghtml=1.1.3=py_0
- sqlalchemy=1.2.6=py36_0
- sqlite=3.20.1=0
- statsmodels=0.8.0=py36_0
- tblib=1.3.2=py36_0
- terminado=0.8.1=py36_0
- testpath=0.3.1=py36_0
- tk=8.6.7=h35a86e2_3
- toolz=0.9.0=py_0
- tornado=5.0.2=py36_0
- traitlets=4.3.2=py36_0
- udunits2=2.2.26=0
- urllib3=1.22=py36h68b9469_0
- wcwidth=0.1.7=py36_0
- webencodings=0.5=py36_0
- wheel=0.30.0=py36h5eb2c71_1
- widgetsnbextension=3.2.1=py36_0
- wrapt=1.10.11=py36_0
- wrf-python=1.1.3=py36_0
- xerces-c=3.2.0=0
- xz=5.2.3=h0278029_2
- yaml=0.1.7=hc338f04_2
- zeromq=4.2.5=1
- zict=0.1.3=py_0
- zipp=0.3.3=py36_1
- zlib=1.2.11=hf3cbc9b_2
- pip:
- affine==2.2.2
- appdirs==1.4.3
- attrs==19.1.0
- beautifulsoup4==4.7.1
- cligj==0.5.0
- cmaps==1.0.0
- elevation==1.0.6
- fasteners==0.14.1
- future==0.17.1
- imageio==2.5.0
- metpy==0.10.0
- monotonic==1.5
- pip==19.1
- pooch==0.2.1
- protobuf==3.7.1
- pyproj==1.9.6
- rasterio==1.0.22
- siphon==0.8.0
- snuggs==1.4.3
- soupsieve==1.9.1
- xarray==0.12.1
prefix: /Your_path/anaconda3/envs/atmpy
注意:1.需要根据自己路径来修改prefix; 2.注释掉pip的部分,后续再单独使用pip安装。
9.参考
- https://zhuanlan.zhihu.com/p/62899936
- https://mirrors.tuna.tsinghua.edu.cn/news/
- https://zhuanlan.zhihu.com/p/64766956
- https://repo.continuum.io/pkgs/