初始化项目使用到的工具如下:
- Poetry: 依赖管理
- VS Code:代码编辑
- Pytest:代码测试
- Windows Terminal:执行相关命令,或者使用 VS Code 内嵌的 Terminal(在 VS Code 中按下
Ctrl + `
)工具。
在开始之前,请确认已经在您的电脑上安装好了 Poetry 以及 VS Code。如未配置好 Python 的开发环境, 请参考 基于 pyenv-win 和 Poetry 构建 Python 开发环境 以及其中的参考资料。
Step 1: 进入到项目目标文件夹
假设我们希望将项目放在电脑的 D 盘,可以执行以下代码,进入到目标盘:
1cd D:
Step 2: 初始化项目
在开始执行以下 Poetry 命令前,请确认 Poetry 的 virtualenvs.in-project = true
(个人习惯,也可以不设置,但建议)。
然后我们可以使用 Poetry 来初始化我们的项目(以下步骤假设项目文件夹未存在):
1poetry new project_name
这将在我们目标盘下初始化一个名为 project_name
的文件夹,其中的目录结构如下:
1project_name
2├── pyproject.toml
3├── README.md
4├── project_name
5│ └── __init__.py
6└── tests
7 └── __init__.py
project_name/project_name/
文件夹主要用于存放项目主要代码,project_name/tests/
文件夹将主要用于存放测试代码。pyproject.toml
文件为项目依赖的配置文件。
由 poetry new project_name
初始化的 pyproject.toml
文件内容类似于:
1[tool.poetry]
2name = "project-name"
3version = "0.1.0"
4description = ""
5authors = ["hakuna@thinkstation <[email protected]>"]
6readme = "README.md"
7
8[tool.poetry.dependencies]
9python = "^3.12" # 使用系统默认 Python 版本
10
11
12[build-system]
13requires = ["poetry-core"]
14build-backend = "poetry.core.masonry.api"
- 在刚开始不熟悉的情况下,建议不要手动修改该文件,可以通过相关
poetry
命令来添加相关配置。 - 考虑到网络原因,建议此刻在终端中执行以下命令为单个项目设置首选镜像:
1poetry source add --priority=primary mirrors https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/
Step 3: 添加项目所需依赖
比如,该项目的主要目的是数据分析,那么我们常用的数据分析依赖库有numpy, matplotplib, pandas等。此外,在数据分析的过程中,我们也可能运用 Pytest 依赖库来完成自动化测试工作。那么,我们可以在包含 pyproject.toml
文件的顶层目录下,执行以下 Poetory 命令,添加相关依赖。
1poetry add numpy matplotlib pandas
执行完以上 Poetry 命令后,我们的 pyproject.toml
文件将呈现如下内容:
1[tool.poetry]
2name = "project-name"
3version = "0.1.0"
4description = ""
5authors = ["hakuna@thinkstation <[email protected]>"]
6readme = "README.md"
7
8[tool.poetry.dependencies]
9python = "^3.12"
10numpy = "^1.26.4"
11matplotlib = "^3.8.3"
12pandas = "^2.2.0"
13
14
15[build-system]
16requires = ["poetry-core"]
17build-backend = "poetry.core.masonry.api"
对于 Pytest,由于该依赖库主要代码测试,并不是项目的主要依赖。因此,通常情况下,我们希望将其作为开发环境中使用。为了实现该目的,我们需要给 poetry add
命令添加 --group=dev
参数,如下
1poetry add --group=dev pytest
由此,我们的 pyproject.toml
文件将呈现如下内容:
1[tool.poetry]
2name = "project-name"
3version = "0.1.0"
4description = ""
5authors = ["hakuna@thinkstation <[email protected]>"]
6readme = "README.md"
7
8[tool.poetry.dependencies]
9python = "^3.12"
10numpy = "^1.26.4"
11matplotlib = "^3.8.3"
12pandas = "^2.2.0"
13
14
15[tool.poetry.group.dev.dependencies]
16pytest = "^8.0.1"
17
18[build-system]
19requires = ["poetry-core"]
20build-backend = "poetry.core.masonry.api"
新的 pyproject.toml
文件与之前的最大区别在于将 pytest
依赖放在了单独的 [tool.poetry.group.dev.dependencies]
.
假设以上依赖是该项目的需要的所有库,到此,初始化项目的工作到一阶段。
Step 4: 在 VS Code 中设置 Python 解释器
通常情况下,VS Code 足够聪明,当我们第一次使用 poetry add
命令后,在 VS Code 中的右下角会提示 “发现新的虚拟环境”,只要点击yes 后,VS Code 会自动设置好项目的虚拟环境。
如果没有,那我们需要手动设置 Python 解释器。首先,我们需要找到虚拟环境中的 Python 解释器路径。这可以通过如下命令实现
1poetry env info
该 Poetry 命令将显示电脑上可用的 Python 解释器,如:
1Virtualenv
2Python: 3.12.1
3Implementation: CPython
4Path: D:\git\project_name\.venv
5Executable: D:\git\project_name\.venv\Scripts\python.exe
6Valid: True
7
8System
9Platform: win32
10OS: nt
11Python: 3.12.1
12Path: C:\Users\hakuna-o\.pyenv\pyenv-win\versions\3.12.1
13Executable: C:\Users\hakuna-o\.pyenv\pyenv-win\versions\3.12.1\python.exe
可以发现,我的电脑上有两个 Python 解释器,一个显示为 Virtualenv,一个显示为 System。我们需要的是 Virtualenv 虚拟环境中的 Python 解释器。那么我们可以复制其中的 Executable 路径,此处为:D:\git\project_name\.venv\Scripts\python.exe
。然后回到 VS Code。在 VS Code 中调出 Command Palette (ctrl + shift + p
),输入 python:select interpreter
后回车会出现一个列表,如下:
从上图可以看见,VS Code 其实已经识别了我们电脑上可用的 Python 解释器。我们可以直接选择对应的 Python 解释器。此项目的解释器为 Python 3.12.1 ('.venv': Poetry)
,该解释器也是 VS Code 默认推荐的。如果此处没有列出相应的 Python 解释器。则,我们可以选择 Enter interpreter path...
,然后将刚才复制的路径填进去。按照如上操作,当我们在 project_name/project_name/
文件夹下新建一个 .py
文件后,VS Code 的状态栏的右边会显示相应的 Python 解释器信息,如 Python 3.12.1 ('.venv': Poetry)
。
Step 5: 在 VS Code 中设置 Pytest
在 VS Code 中调出 Command Palette (ctrl + shift + p
),输入 Python:Configiure Tests
后回车会出现一个列表:
这里出现了两个单元测试框架,由于我们前期选择Pytest,所以在这,我们选择第二个作为项目的测试框架,即 pytest framework。然后,会出现类似与下图所显示的内容:
此处应该选择我们放置tests文件的文件夹,也即 tests
。
完成以上设置后,VS Code 会在 project_name/
文件夹下生成 .vscode/settings.json
和 .pytest_cache
文件夹。在 tests/
文件夹下生成 __pychace__
和 .pytest_cache
文件夹。我们需要适当关注 .vscode/settings.json
。默认生成的配置文件内容类似如下:
1{
2 "python.testing.pytestArgs": [
3 "tests"
4 ],
5 "python.testing.unittestEnabled": false,
6 "python.testing.pytestEnabled": true,
7}
这样,我们可以在 project_name/
下执行如下命令,执行测试工作:
1poetry run pytest
假设在 tests/
下有一个名为 test_exmaple.py
的测试文件,
1def test_sum():
2 assert 1 + 1 == 2
执行 poetry run pytest
后会在Terminal中显示:
1==================================== test session starts ====================================
2platform win32 -- Python 3.12.1, pytest-8.0.1, pluggy-1.4.0
3rootdir: D:\git\project_name
4collected 1 item
5
6tests\test_test.py . [100%]
7
8===================================== 1 passed in 0.01s =====================================
关于在 VS Code 中实现单元测试的更为详细的介绍,请参考如下资料
- Python testing in Visual Studio Code
- Okken, B., 2022. Python Testing with pytest: Simple, Rapid, Effective, and Scalable, 2nd ed. Pragmatic Bookshelf.