众里寻他千百度
我的专业是地理信息科学,电脑中装有 QGIS 和 ArcGIS,对 python 的数据处理(如常见的numpy
、pandas
、matplotlib
)和地学分析(如geopandas
、gdal
、proj
)等方面有较高需求。
在学习python的过程中,我尝试过不同的python的IDE——VSCode、Anaconda(Jupyter Notebook)、Pycharm......踩过的坑不计其数,在这里姑且列出来,包括但不限于:
conda install
速 度 太 慢。我试过很多办法,包括设置代理、切换清华源、安装mamba......但是无论怎样,在安装一些地理相关的包的过程中都不太行(如geopandas、osmnx),常常会卡在 solving environment 这一步。- QGIS 中 python 的各个模块不可以动。我曾经作死在 VSCode 中将 python 路径设置为 QGIS 自带的python解释器,甚至不假思索地进行
pip
安装与更新。结果常常会报一些愚蠢的错误。 - Anaconda 和 Python 相互冲突。这个倒不是大问题,可以进行一系列配置就能解决。不过,Anaconda总是有各种各样的错误,安装各个包就算了,我在 Navigator 里竟然安装不了 RStudio,打开 Navigator 也要等很久,更不用提Anaconda如此庞大的体量了.......
- Python 版本控制。我曾经把 python 名字改成 python37;也曾经每次打开 QGIS 前都修改一次 PYTHONPATH......这实在是太过繁琐了。
在这个寒假假期里,我顺便自学了pandas和geopandas,途中测试各个IDE所得到的结论是:Spyder, yes!
敲定:Spyder Standalone
Spyder本身是集成在Anaconda里的,但是有一点是,Anaconda附带了太多太多的库,所占用的空间也有好几个G之多。
最终,我选择了Spyder的 Standalone installer(并非 Anaconda 里集成)。在探索了这么久之后,我终于发现了最适合我的 IDE,它不仅实用,而且优雅:借助geopandas
和变量查看器,我可以轻松地浏览shp
文件的表格;我也可以直观地看到我所绘制图表的历史记录,这有助于我不断调整参数,进行更好的数据可视化。
至于Jupyter Notebook,这非常赞,但我完全可以借助Binder、colab或在线的Jupyter计算服务,完全不需要在本地配置Anaconda。另外,相较于Jupyter而言,Spyder更易于进行debug
,我可以更加直观地追踪每一个变量的值与状态,也可以在IPython中键入help()或type()等来辅助我进行判断。这对我很具有吸引力。
加上miniconda
当然,选择Spyder的独立版本并非一劳永逸。我遇到的第一个问题是,它无法通过pip
安装第三方包。在我试着安装包时,它提示 “no module named pip
”。官方给出的回复是 “pip
不包括在我们的安装程序中,以避免用户通过安装其他软件包破坏Spyder。”
不过,我也就仅仅遇到了这一个问题。而这个问题已经有了完美的解决方案:
1、安装miniconda。
2、新建一个虚拟环境。
conda activate base
conda create -n myenv spyder-kernels nltk
3、在Spyder编辑器中调整虚拟环境。
正巧,我非常需要conda的环境管理功能,而miniconda完整地提供了这个功能。由于python的软件包数量众多,各个包之间的依赖情况各不相同,所以我会为不同的用途和项目配置不同的虚拟环境。目前,我进行网络编程是一个单独的环境,进行地学分析是另一个单独的环境,使用osmnx
下载路网也是一个单独的环境。这让我处理不同的项目再也没有因为环境配置的问题报过错,切实称得上“得心应手”。
另一个注意事项
经过我的摸索,我发现还有另一个需要注意的地方:就是在切换完虚拟环境后,最好重启一下IPython内核,不然有时候虚拟环境还没有真正切换过去。这也许算是一个小瑕疵?
常用的与虚拟环境有关的conda命令有:
新建虚拟环境:(myenv为虚拟环境名称)
conda create -n myenv spyder-kernels nltk
激活虚拟环境:
conda activate myenv
删除虚拟环境:
conda remove -n your_env_name --all
退出虚拟环境:
activate base
结语
经过一番折腾,我现在正以最舒适的方式编写着我的python代码。相较于Anaconda而言,Spyder + miniconda以更小的内存提供了更快的下载与启动速度,并且能让我清晰地知道每一个变量都处于什么状态。这极大提升了我的编程体验。
少即是多,去掉那些我永远用不上的科学计算包,按需引入我真正需要的,这让我知道我正在做些什么。也许,这也就是所谓的“小而美”吧!
2023年07月13日 09:14
我参照您的教程和文档下了miniconda,base环境是留待默认的,spyder环境指定安装了spyder,geopandas和gdal,装完后,使用clean --all清理了两个环境,整个miniconda占用5G多,其中spyder环境占用近3G(悲),感觉还是不太轻量,base环境有51个包,spyder环境293个包(真的需要这么多吗虽然我是默认的)。我还想着占用能在1G以下呢