Python 和 IPython,关于即时解释器
Python 即时解释器没有语法高亮,没有提示,简单到简陋,能用这个玩意写代码的不是神人就是迫不得已。
IPython 是一个加强版的 Python 解释器,可以提供语法高亮,可以智能提示,可以运行外部命令。正因为这些功能,IPython 其实也是 Jupyter Notebook 背后的驱动力。
但是,相对于 IDE 来说,IPython 的提示还是很蹩脚,有点像张飞绣花。何况现在 IDE 还有 AI 加持,上面两个完全没法打。
另外,在 PyCharm 里还有一个 Python Console,也提供了即时执行的功能,默认情况下体验还是比 IPython 好很多。
如果你的项目里有 IPython 安装,这个 Console 就会默认使用 IPython (配置项里可以修改这个行为)。有了 PyCharm 和 IPython 加持,这个Console 理论上更猛了。
Conda 和 Anaconda,关于分支
Conda 是一个开源的包管理系统和环境管理系统,在 Conda 之上 Python 衍生出了 2 个分支:
- Anaconda - 初学者的傻瓜选择,集成了尽可能多的包(160+)让你直接上手写代码,不用考虑环境配置问题。但是这玩意非常大,至少需要 3G 硬盘空间来安装。
- Miniconda - 简化版的 Conda = Python + Conda,提供必要的管理工具足够你自助完成配置任务。从 Miniconda 转成 Anaconda 只需要一行命令:conda install anaconda
- Python 主分支 - 官方 python.org 发布的分支,仅仅包含标准库,最正统纯净的版本,需要配置的项目也最多。
Anaconda 相对于主分支的 Python一般发布周期更长,内部更复杂,新手可以开箱即用,但一旦出问题也很难解决,这个庞杂的系统里什么问题都有可能发生。
在机器学习或者数据处理领域,anaconda 更受欢迎,因为科学家们都懒得配置环境,大家更关心具体的业务逻辑,何况科学计算需要的包如果手动装非常容易出错,吃力不讨好。
在软件工程领域,比如 Python 用于 Web 或者 API 开发时,原生的 Python 更受欢迎,开发人员只需要引入必要的包来完成功能,比如 Flask 或者Django,从而部署更轻量,出问题更容易排查。
venv,Python 的环境管理
原生 Python
在原生的 Python 分支中,环境管理一般使用 venv 来管理。
python -m venv venv source activate pip list pip install my-package deactivate
在 PyCharm 中使用起来非常方便,UI 直观易懂。
在 VSCode 中现在也相对简单,稍微查一下文档也能弄明白。
Conda 分支
在 Conda 中环境管理通过以下命令来创建和使用。
# create a python 3.10 env conda create -n py310 python=3.10 # activate it conda activate py310 pip list pip install my-package # deactivate deactivate # create an env from requirement file conda create -n myenv --file requirements.txt
貌似 Conda 没法离线创建环境,网上有很多讨论,通过 clone 另外一个环境算是一种绕行的方式。如果你在公司内网没法轻松访问互联网,用 Conda 可能会很头大。
conda create --clone base --name myenv
Jupyter Lab 和 Jupyter Notebook,网页版Python
Jupyter Lab 和 Notebook 都是常用的 web版可交互的 Python 开发环境,在选择时可以参考以下区别
对比项 | Jupyter Notebook | Jupyter Lab |
UI界面 | 更简单,每个笔记本或者文件操作都是一个独立的网页标签,像笔记本一样使用 Python | 集成度很高,功能都在一个网页内完成,插件系统很丰富,可以管理文件,调用终端,监控系统状态,像超级管理员一样使用 Python 以及Python所在的环境 |
插件 | 基本没啥插件,就是 Notebook | 以插件体系为导向的设计,让用户通过插件来实现更丰富的功能 |
功能 | 提供了Notebook 需要的所有功能,就是网页版的 Jupyter Notebook 运行环境 | 除了 Jupyter Notebook 之外的更多功能,比较文件上传下载,调用终端,源代码管理等等 |
成熟度 | 非常成熟,比 Jupyter Lab 出现更早,在数据科学领域和社区被大量使用,目前功能基本上不会有大的变化 | 被设计成下一代 Jupyter Notebook,将来会最终替换 Jupyter Notebook,还能提供多租户功能,目前还在持续开发迭代 |
启动命令 | jupyter notebook | jupyter lab |
基本结论 | 适合稳定,简单的场景 | 有条件的情况下建议都换成 Jupyter Lab |
Jupyter 中的内核
Jupyter 中的kernel 其实就是 Python 的环境,一般需要通过 conda 命令创建后才可以被使用,大致步骤如下。
conda create -n py310 python=3.10 source activate py310 # 必须激活环境后安装 ipypkernel pip install ipykernel python -m ipykernel install --user --name py310 --display-name "Python (3.10)" # 启动 lab jupyter lab
这时候就可以在 Jupyter 中看到多个 kernel 并切换,如果你希望 all in one 也不害怕环境污染,完全可以就只用一个环境一把梭。
如果遇到问题可以通过 Google 排查。 https://stackoverflow.com/questions/39604271/conda-environments-not-showing-up-in-jupyter-notebook