Python 运行环境到底怎么才能舒服?
~ My Python Development Environment, 2018 Edition « Jacob Kaplan-Moss
Yes and No
每年都有好心人在嗯哼, 但是, 都没说到点儿上:
- 专发运行时和系统运行时分离
- 多版本运行时共存
- 多工程模块依赖桟分离管理
- 远程主机运行时相同体验
以上, 才是 Python 长期嗯哼时,最要命的几个需求…
背景
开始俺也是盲目的直接安装到系统 Python 运行时系统中
当然, 那时还在 windows NT 环境中(05年前)
然后, 有了 virtualenv
, 可是, 这货只是将依赖模块堆放到工程目录中而已,
无法作到, 不同工程使用相同模块依赖桟;
终于撞到 PyENV
才通透了下来
PyENV
~ pyenv/pyenv: Simple Python version management
引发嗯哼:
「 Y-北京: 到底为啥要用 pyenv 啊. 要用 Python3 吗? 」
- - - - - - - - - - - - - - -
「 Y-北京: 我以为这个只是用来切换 2与3的虚拟机...所以一直就没弄... 」
- - - - - - - - - - - - - - -
「 Y-北京: 对, 我就是一直以为只有这个作用啊. 」
- - - - - - - - - - - - - - -
「 A-杭州: 大妈说的也是这用法... 」
- - - - - - - - - - - - - - -
pyenv 可以集中管理配置主要 5种100多版本的 Python 运行环境 以及具体任何一个版本环境中和工程匹配的任意模块桟
PyENV 真正的妙处:
- 这儿的 ENV 是两层意思
- 祼 PyENV 是版本环境,
- 然后配合 pyenv-virtualenv 插件
- 才是项目管理用的哪….
- 俺一般是先安装一个干净的版本环境
然后
$ pyenv virtualenv 3.6.3 AI363
- 复制出一个 AI363 工程环境.
- 在工程环境中一但配置好需要的各种大型模块后,
- 就可以在 任何一个新工程目录中用
$ pyenv local AI363
- 绑定上 包含模块的运行时环境 …
- 而任何时刻都可以用
$ pyenv versions
- 来查询自己配置过哪些环境
然后
$ pyenv local 环境别称
瞬间穿越过去, 从而永远不用反复为一个项目安装相同的嗯哼
运行时
因为 PyENV
利用的是 Linux 类似系统的基础环境变量: env
的自动配置,
从而完成瞬间切换当前运行时,
所以, 在远程主机上各种 shell 脚本也可以利用相同机制从 crontab
等等环境中加载上依赖桟环境,
从而, PyENV
以及朋友们, 基本完成所有运行时环境配置的基本需求.
是也乎
「 h-东京: brew 在 /usr/local 下,完全没问题;用 virtualenv 每个项目都是独立的,也没问题 」
- - - - - - - - - - - - - - -
图样图森破:
0: /usr/local 是系统目录, 有复杂的 软链接结构, 权限也有特殊要求 1: virtualenv 的独立是有空间成本的 2: PyENV 则通过 env 实时操作将 virtualenv 的虚拟环境真正的集中管理起来, 秒速安装到任何一个工程目录上
这是没有规模使用 PyENV 时, 无法体验到的
「 S: Pipenv +autoenv 1000个项目,咱建1000个环境 」
- - - - - - - - - - - - - - -
空间浪费 1000倍哪
- PyENV 中的 pip 用 pipenv 来管理是好的
- 但是, 工程的模块依赖就不应该完全重来了
- 用 PyENV 随时切换就好
- 所以, 如果有 1000 个项目, 其中 999个基于相同的第3方模块
-
那么, 管理两个依赖桟, 空间上就只有原先的 0.2% 而已
「 Y-北京: 这个 local 和 global 有啥区别? 」
文档中有写哪
- local 是你当前目录
- global 就是系统运行时, macOS 自己用的
对手残党推荐:pyenv/pyenv-doctor: Verify pyenv installation
「 Yixuan-北京: local 相当于, 我 cd 到某个文件夹, 然后 local 一下, 就嗯哼了整个文件夹下的环境? 」
- - - - - - - - - - - - - - - > 更加简洁:
0: 你 local 设定一次 1: 下次 cd 进来就自动完成指定环境的加载 2: 问题在, 长期不用时, 已经删除的环境尝试绑定就绑定不上了 3: 其实只是在目录中 .python-version 文件写入个别名, 就象 gh-pages 中的 CNAME 一样原理
FAQ:
自怼圈 -> 营造被动节奏外韵律
每年 4.1/8.1/12.1 定时开放报名进入
PS:
任何问题, 随时邮件提问可也:
大妈的多重宇宙 - YouTube
全新自媒体系列...科学幻想,读书,说故事...点击注册~> 获得 100$ 体验券:
订阅 substack 体验古早写作:
Zoom.Quiet’s Chaos42 | Substack
关注公众号, 持续获得相关各种嗯哼:
蟒营®编程思维提高班Python版
**2021.01.11** 因大妈再次创业暂停定期开设, 转换为预约触发:-
+ 任何问题, 随时邮件提问可也:
[email protected]