Python | Windows | 安装一个常用的海洋气象环境

写在前面

经常会看到一些交流群里讨论关于python虚拟环境中某些库安装不成功的问题,比如说关于地学数据处理和绘图的salem、geopandas、关于wrf输出的wrf-python,以及一些仿照matlab绘图风格的basemap。

这里,将我常用的一个安装方法分享给大家,便于在安装的虚拟环境出现问题时,可以比较便捷、快速的安装常用的库。

主要包括以下几个库:


gdal rasterio shapely geopandas scipy pyproj netCDF4 xarray joblib  salem pillow matplotlib scikit-image cartopy wrf-python cmaps metpy basemap

包括常用到的salem、geopandas、metpy、wrf-python

具体步骤

打开conda prompt

一般在windows 上安装完anaconda后,会在桌面-应用,里面出现Aanaconda3的目录,里面包含两个prompt,分别是:

  • Anaconda Powershell Prompt
  • Anaconda Prompt

任选一个用一般没什么问题,除非遇到需要管理员权限的部分可以考虑第一个,我这里选择第二个。

先检查一下自己的虚拟环境

conda env list

像我这里,就有3个虚拟环境,前两个分别为深度学习、日常使用的使用,最后一个为python=3.11版本下的备份环境

新建一个虚拟环境

下面开始新建一个新的虚拟环境,这里新建的环境中的python版本还是3.11,一般不太会出错,虚拟环境名称为:p311

conda create -n p311 python=3.11

新建完成后,进入你命名的虚拟环境,比如我这里就是进入p311的虚拟环境

conda activate p311

检查是否进入虚拟环境成功与否,最简单的方法就是看有没有提示报错,或者看你路径前的环境名称是否从base切换到p311

安装相关库

进入虚拟环境后,下面就是安装以上提到的package,相比于一个个安装,这里推荐使用 conda 一键安装所有的package

  • 使用conda install 而不是 pip install 进行安装,简单来说:原因在于 Conda 可以有效地解决依赖冲突和版本问题,而Pip 只管理 Python 包,无法安装非 Python 的依赖。如果某个包依赖于特定版本的非 Python 库,使用 pip 安装可能会遇到问题。

  • 使用 conda install 同时安装多个package时,他会自动检索相关的依赖环境并选择合适的版本

安装命令:

conda install conda-forge::gdal rasterio shapely geopandas scipy pyproj netCDF4 xarray joblib  salem pillow matplotlib scikit-image cartopy wrf-python cmaps metpy basemap

稍作等待即可,经过我的测试,如果在以上库中,再加上proplot会出现环境不适配的报错,感觉以上的库也是够日常使用了

下面可以进入spyder 或者 vscode中进行测试,如果是进入spyder的话,可以再虚拟环境中安装相关的spyder,

conda install spyder

这样点击相关虚拟环境名称的spyder,就可以直接进入使用了

相关库导入测试

等待安装完成,下面我进入vscode进行简单测试,选择我们刚刚安装的虚拟环境,可能需要安装一个ipykernel才能在vscode中运行,如果没有这个问题就不需要。

conda install ipykernel

导入相关的库。一般可以直接导入成功

测试 salem

测试代码来自官网

  • https://salem.readthedocs.io/en/stable/auto_examples/index.html
import salem 
import geopandas
from salem import mercator_grid, Map, get_demo_file
import matplotlib.pyplot as plt
# prepare the figure
f, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(8, 7),dpi = 200)

# map extent
grid = mercator_grid(center_ll=(10.76, 46.79), extent=(18000, 14000))
sm = Map(grid, countries=False)
sm.set_lonlat_contours(interval=0)
sm.set_scale_bar()

# add topography
fpath = get_demo_file('hef_srtm.tif')
sm.set_topography(fpath)
sm.visualize(ax=ax1, addcbar=False, title='relief_factor=0.7 (default)')

# stronger shading
sm.set_topography(fpath, relief_factor=1.4)
sm.visualize(ax=ax2, addcbar=False, title='relief_factor=1.4')

# add color shading
z = sm.set_topography(fpath)
sm.set_data(z)
sm.set_cmap('topo')
sm.visualize(ax=ax3, title='Color with shading', addcbar=False)

# color without topo shading
sm.set_topography()
sm.visualize(ax=ax4, title='Color without shading', addcbar=False)

# make it nice
plt.tight_layout()
plt.show()

代码结果

salem

测试 geopandas

还是选择官网的测试代码,在他的基础上简单调整:

  • https://geopandas.org/en/stable/gallery/index.html

这里选择的测试个例需要先安装一个库:

conda install libpysal

测试代码:


import geopandas
from geopandas import read_file
import mapclassify
import libpysal
import matplotlib.pyplot as plt
_ = libpysal.examples.load_example("South")
pth = libpysal.examples.get_path("south.shp")
df = read_file(pth)

plt.figure(dpi=200)

ax = df.plot(
    column="HR60",
    scheme="QUANTILES",
    k=4,
    cmap="BuPu",
    legend=True,
    legend_kwds={"loc": "center left", "bbox_to_anchor": (1, 0.5)},
)

结果展示:

测试basemap

代码来自官网:

  • https://matplotlib.org/basemap/stable/users/examples.html

测试代码:

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
# set up orthographic map projection with
# perspective of satellite looking down at 45N, 100W.
# use low resolution coastlines.
map = Basemap(projection='ortho',lat_0=45,lon_0=-100,resolution='l')
# draw coastlines, country boundaries, fill continents.
map.drawcoastlines(linewidth=0.25)
map.drawcountries(linewidth=0.25)
map.fillcontinents(color='coral',lake_color='aqua')
# draw the edge of the map projection region (the projection limb)
map.drawmapboundary(fill_color='aqua')
# draw lat/lon grid lines every 30 degrees.
map.drawmeridians(np.arange(0,360,30))
map.drawparallels(np.arange(-90,90,30))
# make up some data on a regular lat/lon grid.
nlats = 73; nlons = 145; delta = 2.*np.pi/(nlons-1)
lats = (0.5*np.pi-delta*np.indices((nlats,nlons))[0,:,:])
lons = (delta*np.indices((nlats,nlons))[1,:,:])
wave = 0.75*(np.sin(2.*lats)**8*np.cos(4.*lons))
mean = 0.5*np.cos(2.*lats)*((np.sin(2.*lats))**2 + 2.)
# compute native map projection coordinates of lat/lon grid.
x, y = map(lons*180./np.pi, lats*180./np.pi)
# contour data over the map.
cs = map.contour(x,y,wave+mean,15,linewidths=1.5)
plt.title('contour lines over filled continent background')
plt.show()

测试结果:

basemap

总结

以上提供了一个关于海洋-气象专业中常用的python库的便捷安装方法,比如salem、geopandas、basemap,可以非常方便的处理不同虚拟环境的问题。

https://matplotlib.org/basemap/stable/users/geography.html

https://python-graph-gallery.com/281-basic-map-with-basemap/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简朴-ocean

继续进步

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值