我的 Python 开发环境
上周看了 Jacob Kaplan-Moss 的一篇叫《My Python Development Environment, 2020 Edition》的文章,发现挺有意思,决定把自己日常使用搭配也写一篇。
我的新书《LangChain编程从入门到实践》 已经开售!推荐正在学习AI应用开发的朋友购买阅读!
pipx
pipx 是一个自由开源程序,允许你在隔离的虚拟环境中安装和运行 Python 包 。使用 pipx 可以轻松安装 PyPI 中托管的数千个 Python 应用,可以使用常规用户权限执行所有操作,你不需要成为 “root” 用户或不需要具有 “sudo” 权限。值得一提的是,pipx 可以从临时环境运行程序,而无需安装它,非常适合 Python-based CLI 程序,比如 youtube-dl,doc2dash。随 pipx 一起安装的软件包可以随时列出、升级或卸载。
快速体验
pipx 二进制文件的默认位置是 ~/.local/bin
,需要加入用户环境变量,pipx 的默认虚拟环境位置是 ~/.local/pipx。
1 | python3 -m pip install --user pipx |
全局安装 Python 包
1 | pipx install PACKAGE |
使用 pipx 列出所有已安装的包
1 | $ pipx list |
升级包
1 | pipx upgrade cowsay |
卸载包
1 | pipx uninstall |
不安装指定包,而是从临时虚拟环境运行它。
1 | pipx run pycowsay moooo |
pyenv
pyenv 是一个 Python 版本管理器, 可以同时管理多个 Python 版本共存,pyenv 可以根据需求使用户在系统里安装和管理多个 Python 版本:
- 配置当前用户的 Python 版本;(python global version)
- 配置当前 shell 的 Python 版本;(python shell version)
- 配置某个项目(目录及子目录)的 Python 版本;(pyenv local version)
- 配置多个虚拟环境。
pyenv工作原理
对于系统环境变量 PATH ,里面包含了一串由冒号分隔的路径,例如/usr/local/bin
,/usr/bin
,/bin
。每当在系统中执行一个命令时,例如 python 或 pip,操作系统就会在 PATH 的所有路径中从左至右依次寻找对应的命令。因为是依次寻找,因此排在左边的路径具有更高的优先级。在 PATH 最前面插入一个$(pyenv root)/shims
目录,$(pyenv root)/shims
目录里包含名称为 python 以及 pip 等可执行脚本文件;当用户执行 python 或 pip 命令时,根据查找优先级,系统会优先执行shims 目录中的同名脚本。pyenv 正是通过这些脚本,来灵活地切换至我们所需的 Python 版本。快速上手
安装配置,注意!不同操作系统安装的依赖也不同,我的系统是 Ubuntu 18.04.2 LTS (WSL)升级 pyenv1
2
3
4
5
6
7$ sudo apt install libedit-dev
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc
$ exec "$SHELL" #重启 shell
$ pyenv --version # 确认安装成功卸载 pyenv1
2
3
4
5
6
7
8
9# 升级到最新
$ cd $(pyenv root)
$ git pull
# 升级到指定版本
$ cd $(pyenv root)
$ git fetch
$ git tag
v0.1.0
$ git checkout v0.1.0安装卸载 python,可以使用-v 参数,查看安装过程。1
rm -rf $(pyenv root)
查看 pyenv 当前安装了哪些 python 版本1
2pyenv install [-v] <version>
pyenv uninstall <version>查看当前 pyenv 使用的 python 版本1
pyenv versions
进行 python 版本的切换1
pyenv version
1
2
3
4pyenv global version
pyenv rehash
# 更新后, pyenv切换的python版本才会生效
python -Vvenv && virtualenv
venv
Python3.3 及以上标准库内置的虚拟环境管理工具(PEP 405),可以代替Python 之前的 virtualenv。需要注意的是,在 Python3.3 中使用venv 命令创建的环境不包含 pip,需要进行手动安装,在 Python3.4 中改进了这一个缺陷,Python 3.5 开始作为管理虚拟环境的推荐工具。1
2
3
4
5
6# 创建
python3 -m venv /path/to/new/virtual/environment
# 激活
source <venv>/bin/activate
# 退出
deactivatevirtualenv
- 如果使用 Python 2,那就只能选择 virtualenv,需要额外安装它。顺便一提,virtualenv 每次开启虚拟环境之前要去虚拟环境所在目录下的 bin 目录下 source 一下 activate,这就需要我们记住每个虚拟环境所在的目录。一种可行的解决方案是,将所有的虚拟环境目录全都集中起来,比如放到 ~/virtualenvs/,并对不同的虚拟环境使用不同的目录来管理,virtualenvwrapper 正是这样做的。
1
2
3
4
5
6
7
8# 安装virtualenv
pip install virtualenv
# 创建一个干净的虚拟环境,与原来的全局 package 隔绝。
virtualenv --no-site-packages venv-name
# 激活
source <venv>/bin/activate
# 退出
deactivate1
2
3
4
5
6
7
8
9
10# 创建虚拟环境
mkvirtualenv myenv
# 切换到虚拟环境
workon myenv
# 退出虚拟环境
deactivate
# 删除虚拟环境
rmvirtualenv myenv
# 列举所有的环境
lsvirtualenvpoetry
poetry 是一个 Python 虚拟环境和依赖管理工具,另外它还提供了包管理功能,比如打包和发布,可以用 poetry 来同时管理 Python 库和 Python 程序。使用 PEP518 引入的新标准 pyproject.toml 文件管理依赖列表和项目的各种 meta 信息。
锁定依赖存储在 poetry.lock 文件里(这个文件会自动生成),依赖分为两种,生产环境和开发依赖。执行 poetry 或 poetry list 命令查看所有可用的命令。
常用命令
安装激活
1 | curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python3 |
常用功能
1 | poetry new #创建一个项目脚手架,包含基本结构、pyproject.toml 文件 |
依赖库操作
1 | poetry install #安装依赖库 |
基础配置
poetry 的项目配置文件是 pyproject.toml,下面是一些常见的配置项
1 | tool.poetry] |
我的 Python 开发环境