自从NCL停更之后,python的知名度都不断提高了,我也开始了python学习之旅,但是还没开始,就被如何安装Pyngl和Pynio给困住了。网上和官网给的教程都是Linux系统或者OS系统,有老板服务器的同学压根不用担心这个问题,没有任何影响。但是没有服务器就有点惆怅了。
为什么Windows不能直接安装
我想到电脑上安装了Aanconda,那能不能安装PyNIO和PyNgl呢,果不其然出错了,这到底是什么原因?我接着输入anaconda search -t conda pyngl,查看pyngl各个版本信息,发现4个pyngl和pynio安装包根本就没有windows系统的版本,而windows里面安装的环境都是windows下的。因此这就是导致windows系统不能安装Pyngl和Pynio的原因。
因此小结一下:安装Pyngl和Pynio需要在linux环境。
但尽管如此,如果你的电脑是Win10版本,那么你仍然可以安装这两个包。方法是
- 先安装linux子系统;
- 安装miniconda或者Aanconda环境;
- 使用conda安装NCL包和PyNgl和PyNio。
如何在windows中的linux子系统上安装呢?
- 安装linux子系统
- 开启开发者模式。系统设置 -> 更新和安全 -> 针对开发人员 -> 选择开发者模式
点击后会自动安装环境。
- 勾选适用于windows的linux的子系统,点击确定,之后重启电脑。
- 安装Linux子系统,有两种方法安装。第一种是Microsoft store里面直接搜索Ubuntu进行安装。
第二种方法是在win10 命令行内进行安装。Win+R打开cmd,输入bash回车,然后选择y即可安装。
注意:
(1)刚刚安装好Windows 10版本,Linux子系统可能没有处于启用状态。或者安装好linux子系统之后,打开之后输入任意键就闪退了。这时管理员权限的命令提示符(或PowerShell)下输入下面代码,确保子系统可用,然后重启。
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
(2)如果输入bash安装失败,可用lxrun /install /y,即以root登录。
- 初次进入Linux子系统需要设置Linux的用户名及密码。记住输入密码时屏幕上没有显示,这时正常的现象。切换搭配root状态是输入 sudo -s,然后输入密码。
- 更改apt源(选做)。因为Linux子系统的apt源使用的是官方源,需要连接到国外的服务器。所以安装一些软件时下载会很慢,我们可以改用国内的镜像apt源,不改也没有什么问题,不是很影响使用。国内的有阿里源、清华大学源、科大源和网易源,这里推荐科大源。
对原始文件备份:sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
编辑源配置文件/etc/apt/sources.list,可以用vi编辑,讲文本内容替换为:
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
保存运行:sudo apt-get update
2. 安装miniconda或者Aanconda环境
- 下载安装linux版本的miniconda或者anaconda,建议选择更小的miniconda。链接:https://conda.io/en/latest/miniconda.html
- 输入以下命令安装:①bash Miniconda…sh;②source ~/.bashrc 更新bash文件
- 测试安装是否成功,输入conda -V,如果出现相应的版本号即表明安装成功了。
注:默认安装的linux子系统的目录在C:UsersyxkAppDataLocalPackagesCanonicalGroupLimited.Ubuntu16.04onWindows_79rhkp1fndgscLocalStaterootfshome
3. 安装NCL及PyNgl、PyNio
- 安装NCL,输入:conda create -n ncl_stable -c conda-forge ncl,此时可以看见miniconda3envs中出现了一个名为ncl_stable的文件夹,即是ncl的安装包。安装地的。需要调用时,先输入source activate ncl_stable,再输入ncl xxx.ncl即可以执行相应脚本。
- 安装PyNgl、PyNio,参考官网的教程(http://www.pyngl.ucar.edu/Download/ )。
输入:conda create --name pyn_env --channel conda-forge pynio pyngl
或者conda create -n ncl_to_python -c conda-forge xarray netcdf4 scipy pyngl pynio ncl即可。
可发现miniconda3envs下多了pyn_env或者ncl_to_python文件。
调用:需要调用PyNgl、PyNio包的时候,输入source activate pyn_env或source activate ncl_to_python,然后输入python xxx.py脚本即可以运行。
注:有时候发现安装pyn_env和ncl_to_python之后,输入import Nio时报错,如下图:
此时的解决方法是:conda create --name pyn_env --channel conda-forge/label/cf201901 pynio pyngl 来下载pyn_env。至于ncl_to_python目前还没有很好的解决方法。但是ncl_stable+pyn_env的功能=ncl_to_python
- 关于linux子系统运行的疑问:
问题一:找到根目录之后,新建或者复制了文件数据之后,打开ubuntu,为什么输入ls看不到相应的文件?
解答:这个问题确实存在,这是linux 子系统的一个bug。你关闭ubunt终端之后重启,在此打开进入该目录下输入ls,即可以看到新建或者复制的文件了。
总结:有任何文件的更改,特别是通过windows环境下的复制粘贴以及新建的方式,一定得重启ubuntu终端才能生效。
问题二:如何进入C盘或者D盘,输入cd D:会报错,使用cd ../../../一直后退也不行,只能到根目录下面就停止了,那是不是只能在根目录下运行相关程序呢?
解答:要进入其他盘,得输入cd /mnt/。即可以看到各种磁盘了,此时就可以进入C盘/D盘操作了。
问题三:有时候执行cd命令,进入进出文件夹时,都会出现Permission denied问题,这到底是怎么回事?
解答:这是因为权限不够的问题,建议输入sudo -s,进入root命令之后,再去执行相应的命令。但是在root命令下得格外小心哦。
实例运行:
问题:用pynio pyngl读取nc数据,并输出相应的图像
前期处理:①下载数据,仅有7kb
http://www.ncl.ucar.edu/Document/Manuals/NCL_User_Guide/Data/tas_mod1_hist_rectilin_grid_2D.ncwww.ncl.ucar.edu②查看nc数据的属性,了解里面的数组信息,在Python的环境下,可以通过
gdalinfo name.nc 查看
或者
import netCDF4 (得安装netCDF4,可使用pip install netCDF4)
dataset = netCDF4.Dataset('tas_mod1_hist_rectilin_grid_2D.nc')
print(dataset)
如何运行:打开ubuntu——输入source activate pyn_env,进入相应的test目录(包括下载的tas_mod1_hist_rectilin_grid_2D.nc数据和一个test.py脚本,该脚本代码如下)。在该目录下输入python test.py即可运行。
import pandas as pd
import numpy as np
import Ngl,Nio,os
############################################################################
############# read data ##############
############################################################################
file_obs = Nio.open_file("tas_mod1_hist_rectilin_grid_2D.nc")
print (file_obs.variables.keys()) ## 查看存在哪些变量
lon_obs= file_obs.variables["lon"][:]
lat_obs= file_obs.variables["lat"][:]
time_obs= file_obs.variables["time"][:]
tas_obs= file_obs.variables["tas"][:] ##tas_obs是一个四维的数组
print(time_obs) ## 检查是否有错
print(tas_obs)
############################################################################
############# plot setting #############
##################################################################################
wks = Ngl.open_wks("png","111") # 打开一个工作站,与ncl里面的设置一致
resources = Ngl.Resources()
resources.tiMainString = "X-Y plot" # 设置图片标题
resources.tiMainFont = "Times-Roman" # 图片标题字体
resources.tiMainFontHeightF = 0.027 # 图片标题字号
resources.tiXAxisString = "X" # 设置 X 轴标题
resources.tiXAxisFont = "Helvetica" # X 轴标题字体
resources.tiXAxisFontHeightF = 0.02 # X 轴标题字号
resources.tiYAxisString = "Y" # 设置 Y 轴标题
resources.tiYAxisFont = "Helvetica" # Y 轴标题字体
resources.tiYAxisFontHeightF = 0.02 # Y 轴标题字号
resources.xyLineColors = 24 # 设置线条颜色
resources.xyLineThicknesses = 2 # 设置线条粗细
resources.xyMarkLineModes = "MarkLines" # 线条模式
resources.xyMarkers = 0 # 无Marker
resources.xyMarkerColor = 189 # 标记颜色
resources.xyMarkerSizeF = 0.03 # 标记大小 (默认值为 0.01)
plot = Ngl.xy(wks,time_obs,tas_obs[:,0,0,0],resources) # 画图
Ngl.end()
结果:
关注“happy科研”公众号和CSDN博客(ID:weixin_44267600),获取更多有趣有料的干货。
有任何问题,请发邮件至:yfangnuist@gmail.com