一键安装气象常用的Python库(大气科学Python库)

人生苦短,我用Python,气象人需要利器!

对于气象常用的Python库有一个简要的整理,主要是方便自己一键式的在不同的平台上安装常用的库,过去,依赖于pip或conda install package_name 耗时耗力,且各个库的版本号可能会存在依赖关系的冲突,往往顾此失彼。后来深入使用conda,发现依赖于导出和导入开发环境yml文件能够解决这个问题。

依赖的Python分发版本主要是Ananconda,要是觉得这个包过于庞大了,可以精简一些,只安装Miniconda也行。这样,安装好后就能有一个基本的Python环境,在这里推荐Python3.6+以上的版本。而Python的编辑器推荐:Sublime Text3或者Pycharm,前者可以免费使用,非注册版本偶尔会提醒购买,但不影响使用,后者可以下载教育版,非商业用途,是免费使用。至于其他的还有VS Code,也是非常不错的。
最近,anaconda的高校镜像库基本都关停了(清华、中科大、南大),在此时间节点上国内的腾讯源还可以用。~/.condarc的配置文件可以添加一下:

channels:

当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左右,存点核心数据和代码不成问题(需要科学上网来保证其正常使用,推荐Shadowsocks)。

人生苦短,我用Python

附件:YML文件

YML库一览

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
name: atmpy
channels:
- https://mirrors.cloud.tencent.com/anaconda/pkgs/main
- conda-forge
- https://mirrors.cloud.tencent.com/anaconda/cloud/conda-forge
- esri
- https://mirrors.cloud.tencent.com/anaconda/cloud/pytorch/
- https://mirrors.cloud.tencent.com/anaconda/cloud/menpo/
- https://mirrors.cloud.tencent.com/anaconda/cloud/bioconda/
- https://mirrors.cloud.tencent.com/anaconda/cloud/msys2/
- https://mirrors.cloud.tencent.com/anaconda/cloud/conda-forge/
- https://mirrors.cloud.tencent.com/anaconda/pkgs/main/
- https://mirrors.cloud.tencent.com/anaconda/pkgs/free/
- 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

有任何问题都欢迎交流探讨,共同学习进步!


-------------本文结束 感谢阅读-------------
作者Gavin
有问题请在相应页面留言(评论系统DISQUS需要"翻墙"才可见)
或者私信给我 GMAIL: zhpfu.atm@gmail.com
满分是10分的话,这篇文章你给几分
--> -->