<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Grads on 静静的安全笔记</title><link>https://ruajingjing.top/tags/grads/</link><description>Recent content in Grads on 静静的安全笔记</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><lastBuildDate>Mon, 17 Feb 2020 15:37:26 +0000</lastBuildDate><atom:link href="https://ruajingjing.top/tags/grads/index.xml" rel="self" type="application/rss+xml"/><item><title>气象人的JupyterLab</title><link>https://ruajingjing.top/post/%E6%B0%94%E8%B1%A1%E4%BA%BA%E7%9A%84jupyterlab/</link><pubDate>Mon, 17 Feb 2020 15:37:26 +0000</pubDate><guid>https://ruajingjing.top/post/%E6%B0%94%E8%B1%A1%E4%BA%BA%E7%9A%84jupyterlab/</guid><description>&lt;img src="https://ruajingjing.top/" alt="Featured image of post 气象人的JupyterLab" /&gt;&lt;p&gt;上两篇文章&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://blog.bugatii100peagle.cn/2020/02/13/jupyterLab%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE%E6%95%99%E7%A8%8B/" target="_blank" rel="noopener"
 &gt;Jupyterlab安装配置教程&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://blog.bugatii100peagle.cn/2020/02/16/jupyterLab%E5%A4%9A%E7%94%A8%E6%88%B7%E9%85%8D%E7%BD%AE/" target="_blank" rel="noopener"
 &gt;Jupyter多用户配置&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;中讲了Jupyter的主要部署方法，老实说，对新手很不友好，我也不想再经历一次这样的过程，尤其是Basemap的安装。所以，咱直接打包个镜像吧。不得不说Docker真是个拯救了无数程序猿秀发的好工具。&lt;/p&gt;
&lt;h2 id="使用截图"&gt;使用截图
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;img alt="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/44d5d10d73152.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/44d5d10d73152.png"&gt;&lt;/th&gt;
 &lt;th&gt;&lt;img alt="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/362d47fcfb311.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/362d47fcfb311.png"&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;img alt="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/36c7dd118359b.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/36c7dd118359b.png"&gt;&lt;/td&gt;
 &lt;td&gt;&lt;img alt="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/ec9bbcf04edf9.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/ec9bbcf04edf9.png"&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;简单来说，这就是一个部署在服务器上的Anaconda，用的的Jupyterlab的界面，您可以随时随地在任意电脑上打开一个浏览器（IE除外），输入服务器的网址，用户密码就能打开，还能下载数据，计算，绘图，整合了常用的Grads，Fortran的内核，安装了Basemap，Metpy，Siphon，Atmos，ecmwf_api，NCL_to_Python等Python常用气象工具包。&lt;/p&gt;
&lt;h2 id="quick-start"&gt;Quick Start
&lt;/h2&gt;&lt;p&gt;如果你想快速部署，而没有时间看完教程的话，看这里就好。或者看&lt;a class="link" href="https://gitee.com/bugatti100Peagle/jupyter-For-Atmospheric-Scientists" target="_blank" rel="noopener"
 &gt;Gitee上本项目的主页&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;首先安装Docker，方法见&lt;a class="link" href="https://blog.bugatii100peagle.cn/2020/02/13/Docker%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E6%80%BB%E7%BB%93/" target="_blank" rel="noopener"
 &gt;Docker常用命令总结&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;docker pull registry.cn-shanghai.aliyuncs.com/bugatii100peagle/jupytercgmsabefcn:v1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;mkdir jupyterlab
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;mkdir jupyterlab/workspace
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;docker run --name jupytercgmsabefcn -d -p 8000:8888 -v &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;:/workspace -w /workspace -e &lt;span class="nv"&gt;GRANT_SUDO&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;yes --user root registry.cn-shanghai.aliyuncs.com/bugatii100peagle/jupytercgmsabefcn:v1 jupyter-lab --no-browser --port&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;8888&lt;/span&gt; --ip&lt;span class="o"&gt;=&lt;/span&gt;0.0.0.0 --allow-root
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;预计安装时间4小时（博主使用家用WiFi，视网络环境时间可能有延长），其中安装Docker用 1~2 小时，拖取&lt;code&gt;jupytercgmsabefcn&lt;/code&gt;镜像用2小时。&lt;code&gt;run&lt;/code&gt;起来之后，浏览器打开&lt;code&gt;http://IP:8080&lt;/code&gt;，密码是空密码，直接回车即可。&lt;/p&gt;
&lt;h3 id="tips"&gt;Tips
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;不要在jupyterlab直接挂在阿里云OSS，OSS擅长存储不擅长访问。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;jupyterlab/workspace&lt;/code&gt;是用于暂存的工作空间，在此文件夹下读写数据和作图都比较快速。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;jupyterlab&lt;/code&gt;下另建一个新文件夹用于挂载阿里云OSS或FTP，&lt;code&gt;workspace&lt;/code&gt;下文件编写完成再归档至此OSS文件夹。既能保证数据不丢失，又能保证读写速度。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="c-和-grads-的插件"&gt;C 和 Grads 的插件
&lt;/h2&gt;&lt;p&gt;我的镜像是很久以前我就装好了的，拖取的是官方的 jupyter-science 已经预装好了&lt;code&gt;python3&lt;/code&gt; &lt;code&gt;julia&lt;/code&gt; &lt;code&gt;R&lt;/code&gt; 我后来又装了&lt;code&gt;C&lt;/code&gt; &lt;code&gt;Grads&lt;/code&gt;，至于怎么装的我忘了，不过机智的我打包了镜像。直接拖下来用就行。&lt;/p&gt;
&lt;p&gt;【 2020-02-20 14:26:59】我想起来了，好像是在&lt;a class="link" href="https://github.com/jupyter/docker-stacks" target="_blank" rel="noopener"
 &gt;Jupyter-Docker-stacks&lt;/a&gt;上找的&lt;a class="link" href="https://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html#jupyter-datascience-notebook" target="_blank" rel="noopener"
 &gt;jupyter-datascience-notebook&lt;/a&gt;，我好像还把Scipy删掉了。&lt;/p&gt;
&lt;p&gt;&lt;img alt="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/20/1c6123f723cfb.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/20/1c6123f723cfb.png"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;docker pull registry.cn-shanghai.aliyuncs.com/bugatii100peagle/jupytercgrads
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;docker run --name jupyter -d -p 8000:8888 --restart&lt;span class="o"&gt;=&lt;/span&gt;always -v &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;/jupyterlab/workspace:/workspace -w /workspace -e &lt;span class="nv"&gt;GRANT_SUDO&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;yes --user root 127.0.0.1:5000/jupytercgrads jupyter-lab --no-browser --port&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;8888&lt;/span&gt; --ip&lt;span class="o"&gt;=&lt;/span&gt;0.0.0.0 --allow-root
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;安装运行参考我之前写的&lt;a class="link" href="https://blog.bugatii100peagle.cn/2020/02/13/jupyterLab%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE%E6%95%99%E7%A8%8B/" target="_blank" rel="noopener"
 &gt;jupyterLab安装配置教程&lt;/a&gt;，运行界面如下&lt;/p&gt;
&lt;p&gt;&lt;img alt="Snipaste_2020-02-17_18-28-10.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/17/2611c9f776515.png"&gt;&lt;/p&gt;
&lt;h2 id="气象绘图工具包-metpy-siphon-atmos"&gt;气象绘图工具包 &lt;a class="link" href="https://www.unidata.ucar.edu/software/metpy/#help" target="_blank" rel="noopener"
 &gt;Metpy&lt;/a&gt; &lt;a class="link" href="https://unidata.github.io/siphon/latest/installguide.html" target="_blank" rel="noopener"
 &gt;Siphon&lt;/a&gt; &lt;a class="link" href="https://pypi.org/project/atmos/0.2.5/#description" target="_blank" rel="noopener"
 &gt;atmos&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;参考&lt;a class="link" href="https://unidata.github.io/MetPy/latest/installguide.html" target="_blank" rel="noopener"
 &gt;Meetpy Installation Guide&lt;/a&gt;和&lt;a class="link" href="https://www.jianshu.com/p/c71325fc4239" target="_blank" rel="noopener"
 &gt;在Jupyter中安装Python包&lt;/a&gt;，&lt;code&gt;docker exec -it jupyter bash&lt;/code&gt;进入镜像后，输入如下代码&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;python -m pip install metpy
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;python -m pip install siphon
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;atoms要手动安装，下载代码后再install&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;wget https://files.pythonhosted.org/packages/65/1b/9e08dbd6979877cb1d24b5b3ee607c91ece212b010b49715ca7443999e24/atmos-0.2.5.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;tar -xvf atmos-0.2.5.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; atmos-0.2.5
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;nano setup.py
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;修改片段&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;setuptools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;setup&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;pip..req&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;parse_requirements&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#修改片段，不然会发生报错 ModuleNotFoundError: No module named &amp;#39;pip.req&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;setuptools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;setup&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;pip._internal.req&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;parse_requirements&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;保存退出再执行&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;python setup.py install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;参考&lt;a class="link" href="https://blog.csdn.net/weixin_43055882/article/details/100581001" target="_blank" rel="noopener"
 &gt;install quantopian时出现No module named pip.req的解决办法&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="地图支持包basemap"&gt;地图支持包&lt;a class="link" href="https://matplotlib.org/basemap/index.html" target="_blank" rel="noopener"
 &gt;Basemap&lt;/a&gt;
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;conda update -n base conda
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;conda update -n base conda &lt;span class="c1"&gt;# 对，更新两次，直到不会再提示更新&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;更新这步都很费时间，保守估计两小时。为什么说是估计呢，因为后面我没熬住，睡着了。然后参考&lt;a class="link" href="https://blog.csdn.net/weixin_43971405/article/details/101714371" target="_blank" rel="noopener"
 &gt;解决conda的“Solving environment: failed”问题&lt;/a&gt;和&lt;a class="link" href="https://blog.csdn.net/wyhjia/article/details/82386948" target="_blank" rel="noopener"
 &gt;anaconda安装basemap&lt;/a&gt;运行如下代码。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;conda config --set channel_priority flexible
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;conda install basemap
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;弹出如下信息即表示，已经找到basemap安装包，&lt;code&gt;conda install basemap&lt;/code&gt;反而安装挺快，快到让我怀疑昨晚熬夜的两小时还失败了是不是幻觉。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;The following NEW packages will be INSTALLED:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt; basemap conda-forge/linux-64::basemap-1.2.1-py37hd1be537_2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt; geos conda-forge/linux-64::geos-3.8.0-he1b5a44_0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt; proj4 conda-forge/linux-64::proj4-5.2.0-he1b5a44_1006
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt; pyproj conda-forge/linux-64::pyproj-1.9.6-py37h516909a_1002
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt; pyshp conda-forge/noarch::pyshp-2.1.0-py_0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;测试运行，会遇到&lt;a class="link" href="https://blog.csdn.net/runtuandme/article/details/103899726" target="_blank" rel="noopener"
 &gt;basemap KeyError &amp;lsquo;PROJ_LIB&amp;rsquo;解决办法&lt;/a&gt;，解决办法就是代码中指定目录运行。终端输入&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;whereis proj
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 输出：proj: /usr/share/proj /opt/conda/bin/proj&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;浏览器打开jupyter,新建&lt;code&gt;.ipynb&lt;/code&gt;文件，输入&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;matplotlib&lt;/span&gt; &lt;span class="n"&gt;inline&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;PROJ_LIB&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;/usr/share/proj&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;np&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;plt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;mpl_toolkits.basemap&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Basemap&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;figure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;figsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Basemap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;projection&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ortho&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;resolution&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lat_0&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lon_0&lt;/span&gt;&lt;span class="o"&gt;=-&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bluemarble&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scale&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;参考&lt;a class="link" href="https://www.jianshu.com/p/fe431fa6b0a2" target="_blank" rel="noopener"
 &gt;数据科学 IPython 笔记本 8.16 地理数据和 Basemap&lt;/a&gt;无报错，并出现一个地球，即表示安装成功。
&lt;img alt="Snipaste_2020-02-18_08-10-53.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/362d47fcfb311.png"&gt;&lt;/p&gt;
&lt;p&gt;basemap还挺大，装了2G左右吧。
&lt;img alt="Snipaste_2020-02-18_08-21-46.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/bc4d088e96993.png"&gt;&lt;/p&gt;
&lt;h2 id="basemap-的继承者-cartopy"&gt;Basemap 的继承者 Cartopy
&lt;/h2&gt;&lt;p&gt;Basemap 自2020年开始停止维护，所以，新的项目还是用新工具吧。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;wget https://files.pythonhosted.org/packages/e5/92/fe8838fa8158931906dfc4f16c5c1436b3dd2daf83592645b179581403ad/Cartopy-0.17.0.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;tar zxvf Cartopy-0.17.0.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; Cartopy-0.17.0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;python setup.py install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;网不好的也可以尝试从百度网盘下载&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;链接：https://pan.baidu.com/s/1EOofzd9VcFgYTbpRhDf5pg
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;提取码：c60e
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;测试，浏览器打开jupyter输入以下代码,能出土没报错即可。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;import cartopy.crs as ccrs
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;import matplotlib.pyplot as plt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ax&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; plt.axes&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;projection&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ccrs.PlateCarree&lt;span class="o"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;ax.coastlines&lt;span class="o"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Save the plot by calling plt.savefig() BEFORE plt.show()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# plt.savefig(&amp;#39;coastlines.pdf&amp;#39;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# plt.savefig(&amp;#39;coastlines.png&amp;#39;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;plt.show&lt;span class="o"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="https://scitools.org.uk/cartopy/docs/latest/_images/intro-1.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://scitools.org.uk/cartopy/docs/latest/_images/intro-1.png"&gt;&lt;/p&gt;
&lt;h2 id="ncar的ncl_to_python"&gt;Ncar的NCL_to_Python
&lt;/h2&gt;&lt;p&gt;参考&lt;a class="link" href="http://www.ncl.ucar.edu/open_letter_to_ncl_users.shtml" target="_blank" rel="noopener"
 &gt;Important letter regarding the future of NCL&lt;/a&gt;和&lt;a class="link" href="http://www.pyngl.ucar.edu/Download/" target="_blank" rel="noopener"
 &gt;PyNIO和PyNGL&lt;/a&gt;。但是PyNIO和PyNGL与basemap冲突，&lt;a class="link" href="http://mail-archives.apache.org/mod_mbox/climate-dev/201306.mbox/%3C20130611165725.3611.60259@reviews.apache.org%3E" target="_blank" rel="noopener"
 &gt;climate-dev mailing list archives&lt;/a&gt;，也提到对代码做了修改，反正这两货不能在一起，那就打包两个，幸好之前docker了镜像。
&lt;img alt="Snipaste_2020-02-18_09-31-00.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/70f1855f07960.png"&gt;&lt;/p&gt;
&lt;p&gt;从刚安装号&lt;code&gt;atmos&lt;/code&gt;的那个镜像开始，运行并进入镜像。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;conda config --set channel_priority flexible
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;conda install xarray netcdf4 scipy pyngl pynio ncl
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;测试，浏览器打开jupyterlab，上传下面这个包，解压，打开,运行其中的文件，没报错，出图即可。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;链接：https://pan.baidu.com/s/1lpBJTJHp466zbru9cKtoTg
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;提取码：8q3y
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="Snipaste_2020-02-18_10-33-24.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/ec9bbcf04edf9.png"&gt;&lt;/p&gt;
&lt;h2 id="欧洲中心数据下载ecmwf-api"&gt;欧洲中心数据下载ecmwf-api
&lt;/h2&gt;&lt;p&gt;参考&lt;a class="link" href="https://blog.csdn.net/zhanglinqi_007/article/details/79056682" target="_blank" rel="noopener"
 &gt;利用Python调用ECMWF欧洲中心API批量下载数据&lt;/a&gt;，&lt;a class="link" href="https://blog.csdn.net/ginynu/article/details/54990330" target="_blank" rel="noopener"
 &gt;python调用ECMWF欧洲中心api下载数据&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;python -m pip install ecmwf-api-client
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;测试，打开ipython，输入下方代码，没报错即可。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;ecmwfapi&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ECMWFDataServer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="fortran支持jupyter-fortran-kernel"&gt;Fortran支持&lt;a class="link" href="https://devhub.io/repos/ZedThree-jupyter-fortran-kernel" target="_blank" rel="noopener"
 &gt;jupyter-fortran-kernel&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;下载插件包上传之服务器解压安装。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;链接：https://pan.baidu.com/s/1EAkEEVtmuOyB_VtzEAMqrQ
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;提取码：d4l6
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;复制这段内容后打开百度网盘手机App，操作更方便哦
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;apt install gfortran
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;unzip jupyter-fortran-kernel-master.zip
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; jupyter-fortran-kernel-master
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;python setup.py install
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;jupyter-kernelspec install fortran_spec/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;打开浏览器，就可以看到Fortran的选项
&lt;img alt="Snipaste_2020-02-18_11-07-39.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/44d5d10d73152.png"&gt;&lt;/p&gt;
&lt;p&gt;点击打开，输入&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fortran" data-lang="fortran"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;program&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aa&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;implicit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;none&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Hello World&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="Snipaste_2020-02-18_11-07-29.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/36c7dd118359b.png"&gt;&lt;/p&gt;
&lt;h2 id="镜像包信息"&gt;镜像包信息
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://gitee.com/bugatti100Peagle/jupyter-For-Atmospheric-Scientists/blob/master/jupytercgrads_metpy_siphon_atmos_basemap_ecmwf_fortran_cartopy.md" target="_blank" rel="noopener"
 &gt;jupytercgrads_metpy_siphon_atmos_basemap_ecmwf_fortran_cartopy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://gitee.com/bugatti100Peagle/jupyter-For-Atmospheric-Scientists/blob/master/jupytercgrads_metpy_siphon_atmos_ncl_ecmwf_fortran.md" target="_blank" rel="noopener"
 &gt;jupytercgrads_metpy_siphon_atmos_ncl_ecmwf_fortran&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="失败的方法安装地图支持包basemap"&gt;失败的方法安装地图支持包&lt;a class="link" href="https://matplotlib.org/basemap/index.html" target="_blank" rel="noopener"
 &gt;BaseMap&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;首先安装依赖包&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;python -m pip install geos
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;python -m pip install pip
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;python -m pip install Pillow
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;参考&lt;a class="link" href="https://blog.csdn.net/Yshihui/article/details/83280534" target="_blank" rel="noopener"
 &gt;basemap安装教程&lt;/a&gt;，&lt;a class="link" href="https://blog.csdn.net/yanlisuo/article/details/79820550" target="_blank" rel="noopener"
 &gt;linux python 安装basemap&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;pip install pyproj
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;测试，&lt;code&gt;bash&lt;/code&gt;输入以下命令没报错即可。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;python -c &lt;span class="s1"&gt;&amp;#39;import pyproj&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;basemap的包真的好难下，我这里存了个百度网盘，需要的自行下载。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;链接：https://pan.baidu.com/s/1hMhdVfVb1n709bxnSJCECg
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;提取码：a1cw
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;参考&lt;a class="link" href="https://blog.csdn.net/u010456562/article/details/52192586" target="_blank" rel="noopener"
 &gt;python番外（2）——Basemap安装&lt;/a&gt;
上传服务器到Docker环境，这里可以用&lt;code&gt;workspace&lt;/code&gt;目录，反正装完删掉就可以。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;tar zxvf basemap-1.1.0.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; basemap-1.0.7/geos-3.3.3/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;GEOS_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/local
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;./configure --prefix&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$GEOS_DIR&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;make
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;能解压个二十分钟左右吧，慢慢等着，然后make报错。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;ISNAN&lt;span class="o"&gt;(&lt;/span&gt;x&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ISNAN&lt;span class="o"&gt;(&lt;/span&gt;y&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ISNAN&lt;span class="o"&gt;(&lt;/span&gt;z&lt;span class="o"&gt;))&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt; ^~~~~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;../../../include/geos/geom/Coordinate.inl:39:10: note: suggested alternative: ‘SN AN’
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;ISNAN&lt;span class="o"&gt;(&lt;/span&gt;x&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ISNAN&lt;span class="o"&gt;(&lt;/span&gt;y&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ISNAN&lt;span class="o"&gt;(&lt;/span&gt;z&lt;span class="o"&gt;))&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; ^~~~~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; SNAN
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;../../../include/geos/geom/Coordinate.inl: In member &lt;span class="k"&gt;function&lt;/span&gt; ‘bool geos::geom::C oordinate::equals3D&lt;span class="o"&gt;(&lt;/span&gt;const geos::geom::Coordinate&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; const’:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;../../../include/geos/geom/Coordinate.inl:83:21: error: ‘ISNAN’ was not declared in this scope
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;z&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; other.z&lt;span class="o"&gt;)||(&lt;/span&gt;ISNAN&lt;span class="o"&gt;(&lt;/span&gt;z&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ISNAN&lt;span class="o"&gt;(&lt;/span&gt;other.z&lt;span class="o"&gt;)))&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; ^~~~~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;../../../include/geos/geom/Coordinate.inl:83:21: note: suggested alternative: ‘SN AN’
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;z&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; other.z&lt;span class="o"&gt;)||(&lt;/span&gt;ISNAN&lt;span class="o"&gt;(&lt;/span&gt;z&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ISNAN&lt;span class="o"&gt;(&lt;/span&gt;other.z&lt;span class="o"&gt;)))&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; ^~~~~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; SNAN
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;make&lt;span class="o"&gt;[&lt;/span&gt;4&lt;span class="o"&gt;]&lt;/span&gt;: *** &lt;span class="o"&gt;[&lt;/span&gt;Makefile:373: IndexedPointInAreaLocator.lo&lt;span class="o"&gt;]&lt;/span&gt; Error &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;make&lt;span class="o"&gt;[&lt;/span&gt;4&lt;span class="o"&gt;]&lt;/span&gt;: Leaving directory &lt;span class="s1"&gt;&amp;#39;/workspace/basemap-1.1.0/geos-3.3.3/src/algorithm/loc ate&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt;make&lt;span class="o"&gt;[&lt;/span&gt;3&lt;span class="o"&gt;]&lt;/span&gt;: *** &lt;span class="o"&gt;[&lt;/span&gt;Makefile:392: all-recursive&lt;span class="o"&gt;]&lt;/span&gt; Error &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt;make&lt;span class="o"&gt;[&lt;/span&gt;3&lt;span class="o"&gt;]&lt;/span&gt;: Leaving directory &lt;span class="s1"&gt;&amp;#39;/workspace/basemap-1.1.0/geos-3.3.3/src/algorithm/loc ate&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt;make&lt;span class="o"&gt;[&lt;/span&gt;2&lt;span class="o"&gt;]&lt;/span&gt;: *** &lt;span class="o"&gt;[&lt;/span&gt;Makefile:444: all-recursive&lt;span class="o"&gt;]&lt;/span&gt; Error &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt;make&lt;span class="o"&gt;[&lt;/span&gt;2&lt;span class="o"&gt;]&lt;/span&gt;: Leaving directory &lt;span class="s1"&gt;&amp;#39;/workspace/basemap-1.1.0/geos-3.3.3/src/algorithm&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt;make&lt;span class="o"&gt;[&lt;/span&gt;1&lt;span class="o"&gt;]&lt;/span&gt;: *** &lt;span class="o"&gt;[&lt;/span&gt;Makefile:476: all-recursive&lt;span class="o"&gt;]&lt;/span&gt; Error &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt;make&lt;span class="o"&gt;[&lt;/span&gt;1&lt;span class="o"&gt;]&lt;/span&gt;: Leaving directory &lt;span class="s1"&gt;&amp;#39;/workspace/basemap-1.1.0/geos-3.3.3/src&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt;make: *** &lt;span class="o"&gt;[&lt;/span&gt;Makefile:368: all-recursive&lt;span class="o"&gt;]&lt;/span&gt; Error
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;解决办法参考&lt;a class="link" href="https://blog.csdn.net/pyml_kdl/article/details/103289683" target="_blank" rel="noopener"
 &gt;GEOS安装出错&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; include/geos/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;nano platform.h
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;修改24行&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/* Has isnan */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/* #undef HAVE_ISNAN */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;改为&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/* Has isnan */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define HAVE_ISNAN 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后 不要&lt;code&gt;configure&lt;/code&gt; 直接 &lt;code&gt;make&lt;/code&gt; 然后 &lt;code&gt;make install&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;make 也要个40多分钟吧&lt;/p&gt;
&lt;p&gt;【 2020-02-18 0:23:56】 一个小时，反正也就只有等着。&lt;/p&gt;
&lt;p&gt;【 2020-02-18 1:08:34】 又一个小时，我好想睡觉，但是不看他装完我睡不着。&lt;/p&gt;
&lt;p&gt;【 2020-02-18 1:28:23】我好像想起来我折腾这玩意这么慢了，这是在OSS下，为了方便管理代码，我挂载了OSS盘做储存，OSS擅长存而不擅长高频访问，而编译&lt;code&gt;make&lt;/code&gt;就是个高频的活动。&lt;/p&gt;
&lt;p&gt;【 2020-02-18 1:39:44】脱离OSS目录重新&lt;code&gt;configure&lt;/code&gt; &lt;code&gt;nano platform.h&lt;/code&gt; &lt;code&gt;make&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;【2020-02-18 1:44:01 】make 完毕，make install 不到30秒完毕。2/100*60=1.2，也就是说我花了两小时等一个1分20秒就能出的东西，还傻等了两小时。&lt;/p&gt;
&lt;p&gt;但是我回到&lt;code&gt;basemap&lt;/code&gt;文件夹下&lt;code&gt;python setup.py install&lt;/code&gt; 时报错&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;In file included from src/_geoslib.c:248:0:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;/usr/local/include/geos_c.h:149:22: note: expected ‘GEOSMessageHandler &lt;span class="o"&gt;{&lt;/span&gt;aka void &lt;span class="o"&gt;(&lt;/span&gt;*&lt;span class="o"&gt;)(&lt;/span&gt;const char *&lt;span class="o"&gt;)}&lt;/span&gt;’ but argument is of &lt;span class="nb"&gt;type&lt;/span&gt; ‘void &lt;span class="o"&gt;(&lt;/span&gt;*&lt;span class="o"&gt;)(&lt;/span&gt;char *, char *&lt;span class="o"&gt;)&lt;/span&gt;’
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt; extern void GEOS_DLL initGEOS&lt;span class="o"&gt;(&lt;/span&gt;GEOSMessageHandler notice_function,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;···
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;src/_geoslib.c:5619:13: error: ‘PyThreadState &lt;span class="o"&gt;{&lt;/span&gt;aka struct _ts&lt;span class="o"&gt;}&lt;/span&gt;’ has no member named ‘exc_traceback’&lt;span class="p"&gt;;&lt;/span&gt; did you mean ‘curexc_traceback’?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt; tstate-&amp;gt;exc_traceback &lt;span class="o"&gt;=&lt;/span&gt; local_tb&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt; ^~~~~~~~~~~~~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;8&lt;/span&gt;&lt;span class="cl"&gt; curexc_traceback
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;9&lt;/span&gt;&lt;span class="cl"&gt;error: Command &lt;span class="s2"&gt;&amp;#34;gcc -pthread -B /opt/conda/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/usr/local/include -I[&amp;#39;/opt/conda/lib/python3.7/site-packages/numpy/core/include&amp;#39;] -I/opt/conda/lib/python3.7/site-packages/numpy/core/include -I/opt/conda/include/python3.7m -c src/_geoslib.c -o build/temp.linux-x86_64-3.7/src/_geoslib.o -MMD -MF build/temp.linux-x86_64-3.7/src/_geoslib.o.d&amp;#34;&lt;/span&gt; failed with &lt;span class="nb"&gt;exit&lt;/span&gt; status &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;参考 &lt;a class="link" href="https://www.cnblogs.com/gerrydeng/p/7159021.html" target="_blank" rel="noopener"
 &gt;Python踩坑之路&lt;/a&gt;，
&lt;a class="link" href="https://github.com/mcfletch/pyopengl/issues/11" target="_blank" rel="noopener"
 &gt;Python 3.7 Build failure: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_type’; did you mean ‘curexc_type’? #11&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;pip install PyOpenGL PyOpenGL_accelerate
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;apt-get install python3-dev
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;apt-get install libevent-dev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;当然都没有解决。&lt;/p&gt;</description></item></channel></rss>