本文是为了 Pycharm 中使用isort不方便的问题,所做的一些尝试
主要为:在 BlackConnect插件 + blackd进程 的基础上,在blackd源码中加入isort处理逻辑。
需要最新方案的可以直接看第二版 补充
第一版 在本篇文章下方
理解思路的可以先看第一版,再看第二版
vscode安装完插件可以很方便配置,可以参考我的文章 pycharm/vscode 配置black和isort
摘出blackd源码
把必要代码整合为单个文件blackd.py
只安装必要依赖,使用单个源码文件blackd.py启动blackd进程
python -m 模块名
使用的,参见__main__,可以忽略known_first_party
中需要加入项目包名或者项目中的模块名这个步骤是因为isort方法启动目录不在项目中,无法自动识别项目第一级模块名,需要手动填入
如需其他配置自行修改isort_config
字典的值即可,参考isort相关文档
isort_config = dict(
multi_line_output=3,
known_first_party=[],
)
随后在中间req_str = req_str[first_newline_position:]
后面和前几行if
的同级位置上,加入isort处理逻辑
req_str = isort.code(
req_str,
line_length=line_length,
**isort_config,
)
# 创建python环境(自行解决)
# 必要依赖
pip install black isort aiohttp
# 启动进程
python blackd.py
也可以跳过前3个步骤,直接使用修改后的blackd.py,再按照4、5步骤操作
在pycharm中使用isort格式化python import代码很不方便,写代码时blackConnect插件使用http请求调用blackd服务进行格式化代码,在 blackd 服务中添加 isort 格式化代码的逻辑来达到 black + isort的 效果。
同样原理,使用blackd的格式化方式都可以根据本教程实现,未使用blackd的话也可以参考该思路修改black源码实现。
也可以直接clone black项目到本机,主要只是为了使用black项目源码
开发black项目建议使用Python 3.12,可以看下原文:
We now have a scripts/release.py script to help with cutting the release PRs.
python3 scripts/release.py --help is your friend.
release.py has only been tested in Python 3.12 (so get with the times )
这里省略了创建虚拟环境的步骤,按照自己的习惯来
pip install -r test_requirements.txt
pip install -e .[d]
pre-commit install
pip install isort aiohttp
src/blackd/__init__.py:179
,在return web.Response
前加入isort格式化代码的逻辑:multi_line_output 是isort的多行代码换行方式
记得在代码文件开始位置import isort
formatted_str = isort.code(
formatted_str,
profile="black",
line_length=line_length,
multi_line_output=3,
)
python -m src.blackd
后续打包步骤可以参考black文档中使用Github Action打包:cutting-a-release