Python 进阶
Python 进阶
python 并行
Fundamentals of Parallel Programming — Parallel Programming - MolSSI Education documentation
python pytest 和命令行解析
python flush()
函数
numba:对循环、函数和 numpy 有加速作用,对 pandas 无效
类型提示
talks/PDF/2024-09-12-mypy.pdf at main · stone-zeng/talks · GitHub
类型提示/标注(Type Hints),提高代码质量和可维护性
从 Python 3.9 开始,PEP 585 引入了对标准集合和其他几个类型的泛型版本的内置支持。这意味着你可以直接使用像 list、dict、set、tuple 等内置数据结构进行类型注解,而不必依赖于 typing 模块中的对应类型
1 | int, float, bool, str # 基本类型 |
1 | from typing import List, Tuple, Dict, Set, Union, Literal |
类型检查工具
静态类型检查:
- pyright
- mypy
Run-time 类型检查:GitHub - agronholm/typeguard
1 | # 安装 |
代码格式化
1 | # PyPI 安装 |
- VSCode 设置 black-formatter 的单行字符长度限制:vscode 配置 python black 格式化单行长度 - Ainsliaea - 博客园
1 | "black-formatter.args": [ |
打包
PyScaffold 包:创建、设置、管理 Python 项目的工具
MANIFEST.in
文件:用于自定义和精确控制 Python 包的源码分发包的内容。
设置 python package:python_packages.md
项目打包参考
alab_control/setup.py at main · CederGroupHub/alab_control · GitHub
GitHub - Roy-Kid/modern-python-template: A low dependency project template for Python projects.
python package documentation
Python project 目录结构
1 | # 结构 1 |
python package 模板参考
配置文件
基于 imports 生成 requirements.txt
文件:GitHub - bndr/pipreqs: pipreqs - Generate pip requirements.txt file based on imports of any project. Looking for maintainers to move this project forward.
GitHub - abravalheri/validate-pyproject: Validation library for simple check on `pyproject.toml`
有 3 种文件格式(需要用到的一些文件:requirements.txt
README.md
MANIFEST.in
等):
setup.cfg
(适用于不需要复杂构建逻辑的项目)setup.py
(常用)pyproject.toml
(更现代的方法)
setup.py
示例
1 | from distutils.core import setup |
long_description
参数在setup.py
文件中主要用于提供 package 的详细描述,通常在 PyPI 上显示
在 setup.py
文件中指定入口点(entry_point
)来生成命令行脚本
1 | from setuptools import setup, find_packages |
setup.cfg
示例
1 | [metadata] |
pyproject.toml
文件
- 基于 PEP 518 标准提出,旨在提供一个统一的配置格式来替代多个配置文件如
setup.py
,setup.cfg
,requirements.txt
等)的需要 [build-system]
- 指定构建系统的要求[tool.some_tool]
- 配置特定工具的选项(如 pytest、ruff、isort 等)
1 | [build-system] |
其他相关设置
1 | [project] |
- 设置 package 的数据文件路径
1 | import pkg_resources |
1 | package_data={ |
发布到 PyPI
在 PyPI,TestPyPI(可选) 注册账号;注册好并登录后需先设置 2FA(安卓端可使用 Google 身份验证器 app),之后创建
~/.pypirc
配置文件(建议使用 API 的形式,而非用户名、密码的形式)配置文件
.pypirc
示例
1 | [distutils] |
- 安装 twine(上传 Python package 到 PyPI 的工具)
1 | pip install -U twine |
- 构建 package
1 | python setup.py sdist bdist_wheel |
- 上传到 TestPyPI 进行测试(可选)
1 | twine upload --repository testpypi dist/* |
- 检查
1 | twine check dist/* |
- 上传到 PyPI
1 | twine upload dist/* |
- PyPI 自动发布 CI、自动发布 Release CI
参考:workflow-sandbox/.github/workflows/release.yml at master · rpanderson/workflow-sandbox · GitHub
Jupyter Notebook
在 Jupyter Notebook 中使用 Python 时,在函数或类的方法后添加
??
可以查看其 docstringJupyter Notebook ipynb 文件转 HTML 格式
- 使用
jupyter nbconvert --to html notebook.ipynb
- VSCode,打开 ipynb 文件,在 “大纲” 右侧点击三个点,选择导出成 HTML(需安装 notebook 包)
- 使用
代替 Jupyter Notebook:GitHub - marimo-team/marimo
在终端中运行 Jupyter:GitHub - joouha/euporie: Jupyter notebooks in the terminal
1 | euporie-preview notebook.ipynb # 预览 |
- 魔法函数 line magic function
1 | %lsmagic # 列出所有的魔法函数 |
- VSCode,在 Python 脚本中的代码前添加
# %%
,可像 Jupyter Notebook 一样运行一段代码;添加# %% [markdown]
,可编写 Markdown
IPython
在 IPython 中按 Tab 键可补全可用的类的方法和属性;在函数或类的方法后添加
?
可以查看其 docstring
1 | XXX? # 一个问号;查看类或函数的 docstring |
mpi4py
分布式内存
共享式内存
1 | # 安装 |
1 | from mpi4py import MPI |
非阻塞发送通常用于提高并行性,允许发送者继续执行其他任务,而不必等待接收者。但需要小心,确保在接收之前不要修改发送的数据,以免出现数据一致性问题。通常需要使用 comm.irecv
或其他方法来等待非阻塞发送的消息。
其他
“version bump” 版本号更新
版本号格式:以主要版本号.次要版本号.修补版本号
更新版本号原因:
- 新功能添加:当软件新增功能时,可能会增加主要或次要版本号。
- 错误修复:修复错误或进行小的改进通常会增加修补版本号。
- API 变更:如果更改了软件的 API 或其他重大更改,通常会增加主要版本号。
PyTorch 简单用法:PyTorch - Isshiki修’s Notebook
1 | # 对列表中的元素进行排列组合 |