我的 Python 开发环境

上周看了 Jacob Kaplan-Moss 的一篇叫《My Python Development Environment, 2020 Edition》的文章,发现挺有意思,决定把自己日常使用搭配也写一篇。

我的新书《LangChain编程从入门到实践》 已经开售!推荐正在学习AI应用开发的朋友购买阅读!
LangChain编程从入门到实践

pipx

pipx 是一个自由开源程序,允许你在隔离的虚拟环境中安装和运行 Python 包 。使用 pipx 可以轻松安装 PyPI 中托管的数千个 Python 应用,可以使用常规用户权限执行所有操作,你不需要成为 “root” 用户或不需要具有 “sudo” 权限。值得一提的是,pipx 可以从临时环境运行程序,而无需安装它,非常适合 Python-based CLI 程序,比如 youtube-dl,doc2dash。随 pipx 一起安装的软件包可以随时列出、升级或卸载。

快速体验

pipx 二进制文件的默认位置是 ~/.local/bin,需要加入用户环境变量,pipx 的默认虚拟环境位置是 ~/.local/pipx。

1
2
3
4
python3 -m pip install --user pipx
python3 -m pip install -U pipx
python3 -m pipx ensurxepath
# 等效于 python3 -m userpath append ~/.local/bin

全局安装 Python 包

1
pipx install PACKAGE

使用 pipx 列出所有已安装的包

1
2
3
4
5
$ pipx list
venvs are in /root/.local/pipx/venvs
apps are exposed on your $PATH at /root/.local/bin
package pycowsay 0.0.0.1, Python 3.6.8
- pycowsay

升级包

1
2
pipx upgrade cowsay
pipx upgrade-all

卸载包

1
2
pipx uninstall
pipx uninstall-all

不安装指定包,而是从临时虚拟环境运行它。

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)
    1
    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 # 确认安装成功
    升级 pyenv
    1
    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
    卸载 pyenv
    1
    rm -rf $(pyenv root)
    安装卸载 python,可以使用-v 参数,查看安装过程。
    1
    2
    pyenv install  [-v] <version>
    pyenv uninstall <version>
    查看 pyenv 当前安装了哪些 python 版本
    1
    pyenv versions
    查看当前 pyenv 使用的 python 版本
    1
    pyenv version
    进行 python 版本的切换
    1
    2
    3
    4
    pyenv global version
    pyenv rehash
    # 更新后, pyenv切换的python版本才会生效
    python -V

    venv && 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
    # 退出
    deactivate

    virtualenv

  • 如果使用 Python 2,那就只能选择 virtualenv,需要额外安装它。
    1
    2
    3
    4
    5
    6
    7
    8
    # 安装virtualenv
    pip install virtualenv
    # 创建一个干净的虚拟环境,与原来的全局 package 隔绝。
    virtualenv --no-site-packages venv-name
    # 激活
    source <venv>/bin/activate
    # 退出
    deactivate
    顺便一提,virtualenv 每次开启虚拟环境之前要去虚拟环境所在目录下的 bin 目录下 source 一下 activate,这就需要我们记住每个虚拟环境所在的目录。一种可行的解决方案是,将所有的虚拟环境目录全都集中起来,比如放到 ~/virtualenvs/,并对不同的虚拟环境使用不同的目录来管理,virtualenvwrapper 正是这样做的。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 创建虚拟环境
    mkvirtualenv myenv
    # 切换到虚拟环境
    workon myenv
    # 退出虚拟环境
    deactivate
    # 删除虚拟环境
    rmvirtualenv myenv
    # 列举所有的环境
    lsvirtualenv

    poetry

    poetry 是一个 Python 虚拟环境和依赖管理工具,另外它还提供了包管理功能,比如打包和发布,可以用 poetry 来同时管理 Python 库和 Python 程序。使用 PEP518 引入的新标准 pyproject.toml 文件管理依赖列表和项目的各种 meta 信息。

锁定依赖存储在 poetry.lock 文件里(这个文件会自动生成),依赖分为两种,生产环境和开发依赖。执行 poetry 或 poetry list 命令查看所有可用的命令。

常用命令

安装激活

1
2
3
curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python3
source $HOME/.poetry/env
poetry --version

常用功能

1
2
3
4
5
poetry new	 #创建一个项目脚手架,包含基本结构、pyproject.toml 文件
poetry init #基于已有的项目代码创建 pyproject.toml 文件,支持交互式填写
poetry build #构建 tar.gz 或 wheel 包
poetry publish #发布到 PyPI
poetry run #运行脚本和代码

依赖库操作

1
2
3
4
5
poetry install	#安装依赖库
poetry update #更新依赖库
poetry add #添加依赖库
poetry remove #移除依赖库
poetry show #查看具体依赖库信息,支持显示树形依赖链

基础配置

poetry 的项目配置文件是 pyproject.toml,下面是一些常见的配置项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
tool.poetry]
name = "demo"
version = "0.1.0"
description = ""
authors = ["morso"]
license = "MIT"

readme = "README.md"

homepage = "https://poetry.eustace.io/"
repository = "https://github.com/sdispater/poet"
documentation = "https://poetry.eustace.io/docs"

keywords = ["packaging", "dependency", "poetry"]

classifiers = [
"Topic :: Software Development :: Build Tools",
"Topic :: Software Development :: Libraries :: Python Modules"
]

[tool.poetry.dependencies]
requests = "^2.18"

[tool.poetry.dev-dependencies]
pytest = "^3.4"
tox = "^3.0"

[tool.poetry.scripts]
poetry = "poetry.console:main"
作者

莫尔索

发布于

2022-03-13

更新于

2024-05-19

许可协议

评论