July 6, 2020

Pyenv + poetry 优雅的管理你的 pypi 库

Pyenv + poetry 优雅的管理你的 pypi 库

如果你在维护一个 pypi.org 上的 lib,那么相信你已经跟 setup.xx/ wheel 之类的打过几回招呼了,不知道你感觉怎样,反正我感觉不咋样,所以入坑了 poetry 来做这件事情,顺便把 conda 换成了 pyenv(只为尝鲜),然后更新了几个 vs code 的 extension: flake8/pytest/black (为了让开发过程更爽),pyright 换成了 pylance(听说更好)

环境配置

  • 安装pyenv
curl https://pyenv.run | bash
  • 把这些东西放到 .bash_profile 的最后:
export PATH="/Users/dujun/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
  • 重开一个 terminal 后可以看到 pyenv 已经生效 :
    -----2020-07-06---4.36.27

  • 查看已经安装的 python 环境:

$ pyenv versions
* system (set by /Users/dujun/.pyenv/version)
  • 安装依赖
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev python-openssl git
  • 安装一个 3.8.x 的 Python:
pyenv install 3.8.3
  • 切换到 python3.8.3:
pyenv global 3.8.3

pyenv 任务完成,接下来配置 poetry 用于管理生成 package,并上传 pypi 等工作:

poetry

  • 在 python3.8.3 环境下安装 poetry, 虽然我们可以直接通过 pip 安装,但这里还是推荐使用官方的这个脚本,方便以后通过 poetry self:update 来进行自我升级
curl -SSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python
  • 安装完成之后有两种方式配置 poetry,如果是新项目则直接 poetry new your-proj 生成你项目框架;如果是已有项目则执行 poetry init 完成项目的初始化。

  • 使用 Poetry 时,在 pyproject.toml 末尾添加下面的内容来设置自定义镜像源:

[[tool.poetry.source]]
name = "douban"
url = "https://pypi.doubanio.com/simple/"
  • 完成上一步之后就可以直接到项目根目录(也就是有 pyproject.toml那个目录)下激活 python-venv 插件:
poetry shell
Creating virtualenv onceml-backend-_kj9DE3G-py3.8 in /Users/dujun/Library/Caches/pypoetry/virtualenvs
Spawning shell within /Users/dujun/Library/Caches/pypoetry/virtualenvs/onceml-backend-_kj9DE3G-py3.8
bash-3.2$ . /Users/dujun/Library/Caches/pypoetry/virtualenvs/onceml-backend-_kj9DE3G-py3.8/bin/activate

至此我们配置好了python 环境和 venv 环境,接下来可以配置 vs code,让开发环境更顺手。

VS Code

  • 装好 vs code 的扩展:
Python 和 Pylance,这两个插件都是出自微软,
  • 装好代码格式化插件、单元测试辅助插件 : flak8/black 、 pytest:
poetry add -D flak8 black pytest
  • 如果是已经安装配置好的项目则直接执行以下指令安装好所制定软件包即可:
poetry update
  • 在项目目录下, 首先执行 poetry shell, 然后打开( code .),你会发现所有需要配置的文件,包括 pytest/flak8/black 都已经 ready,你只需要在根目录下创建一个tests 文件夹(非必须),然后在里头写 test_xxx.py 这样的单元测试文件就可以了。

上传 pypi:

  • 首先本地 build 好需要发布的包:
poetry build
  • 一切配置完成后就可以发布了:
poetry publish

填好你在 pypi.org 上的用户名密码,等 upload 过程完成,你的第一个 lib 就已经上传完成了! 马上通过 pip install your-first-lib 来测试以下吧!