从virtualenv->conda->poetry->rye
说一下我个人使用的一些python包管理工具的使用心得, 以及一些不断切换的原因。
- virtualenv
-
最早使用的是virtualenv, 当时python还没有venv, virtualenv是一个第三方的包,用于创建独立的python环境。
-
python使用虚拟环境的原因也很简单,就是解决不同项目之间的依赖问题,比如项目A需要用到一个版本的requests, 项目B需要用到另一个版本的requests, 这时候就需要两个独立的python环境。
-
后来python3.3开始自带了venv, 用法和virtualenv差不多,但是venv更加简单,不需要安装额外的包。
- conda
- 当使用python做过一些项目后,感觉在每一个项目里面安装一样的依赖看上去挺无聊。而conda提供了一个集中环境管理的解决方案。如果做数据分析, 需要用的pandas, numpy, scikit-learn, matplotlib等等,可以单独创建的个数据分析的虚拟环境,那只要是数据分析的项目,可以用一个环境。
- poetry
- Poetry 可以安装在global,类似conda, 但是官方建议单独安装在virtual environment 虚拟环境, 可以单独建一个虚拟环境,单独安装poetry, 然后将{project_fold}/venv/bin 加入PATH环境,后面再使用poetry new 创建新的项目, 管理环境,用poetry shell 激活环境。
- 如果需要切换python 版本,可以使用pyenv或者, 在全局环境安装对应的python版本,在pyproject.toml文件中指定对于的python版本。poetry install 使用对于的Python版本来创建环境。
- rye
- rye是一个比较新的包管理工具,rye是安装在全局环境,并且是依赖virtualenv来管理虚拟环境。并且rye是要求替代pip来管理并安装依赖,我还没有尝试过,但是目前看上去对LSP支持还有一些缺陷,我不清楚类似pyright如何知道rye项目的python环境。