清华Anaconda 镜像恢复及一键安装气象常用的Python库

2020-04-21 16:11:57 浏览数 (1)

对于气象常用的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的配置文件可以按照如下命令添加。

命令添加:

代码语言:javascript复制
# 添加清华的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的配置文件:

代码语言:javascript复制
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/

0 人点赞