一些实用工具,帮助你在自己的机器上开发 Exercism 的 Python 代码。
这里收集了社区中一些广受欢迎的工具。 它既不具有规定性,也不追求面面俱到。 我们认为这些工具都能很好地完成各自的工作,但肯定还有其他同样优秀的工具。 如果你有编辑器、集成开发环境、工具或插件的推荐,欢迎在 GitHub 上把它添加到本文档。
在开始探索之前,请确保你安装了较新版本的 Python。
Exercism 网站平台目前支持 Python 3.10 - 3.13.5(练习和测试)和 Python 3.13.5(工具)。
我们的在线测试运行器目前使用 pytest 8.4.0 和 pytest-subtests 0.14.2。
我们的在线分析器使用 pylint 4.0.4。
在本地使用不同版本的 Python、pytest 或 pylint,得到的结果可能与网站上的不同。
更多信息请参阅在本地安装 Python。
Python 虚拟环境提供了轻量级的运行时和包隔离。 它可以帮助你整理项目,把你安装的 Python 包集中放在某个特定的环境目录里。 不同的环境可以保存不同版本的 Python 运行时,以及各自的项目或库依赖。 这样可以避免因为给某个项目升级某个库、却“破坏”了另一个项目的依赖而引发的 bug 和不兼容问题。
如今在用的虚拟环境和类虚拟环境工具非常多,而且用内联脚本元数据、dev containers 或 docker 来替代虚拟环境的做法也越来越流行。 重要的是多尝试不同的策略,找到适合你开发风格和项目需求的那一种。 不要以为这里的策略是放之四海而皆准的,也别以为它们是你唯一的选择。 如果想了解这里没有提到的更多工具,可以看看 Bas Nijholt 的这篇博客文章,并保持好奇心。
这里我们要介绍三种主要的虚拟环境工具:Python 标准库中的 venv、第三方的 conda env(使用 conda 包管理器以及(通常)Anaconda Python 发行版),还有第三方用来替代 pip + venv 的 uv。
这三种工具使用和/或安装起来都相当简单。
此外,PyEnv、Poetry 和 virtualenvwrapper 也能帮你在一台机器上管理多个 Python 版本和多个 Python 环境。
venv 创建虚拟环境要用 venv 创建虚拟环境,先 cd 到你想存放环境的目录。
这个目录应当与项目代码分开,而且不要把它提交到版本控制。
接下来,运行 venv 命令,并给出你想存放这个特定环境的文件夹名称。
常见的约定是把这个文件夹命名为 <project-name-here>_venv:
Windows
PS C:\Users\foobar> py -m venv {name_of_virtualenv}
要激活虚拟环境,请运行以下命令:
PS> .\{name_of_virtual_env}\Scripts\activate.bat
(venv) PS> _
Linux/MacOS
$ python3 -m venv {name_of_virtualenv}
created virtual environment ... in 8568ms
要激活虚拟环境,请运行以下命令:
$ source {name_of_virtual_env}/bin/activate
(venv) $ _
venv 激活后,你就可以在环境“内部”运行 pip 命令来安装包。
安装的包会与这个 venv 的 Python 版本关联,并存放在 {name_of_virtual_env}/Lib 里面。
要停用虚拟环境,可以调用 deactivate 脚本,它和 activate 位于同一个目录。
conda 创建虚拟环境最新版本的 conda 可以通过 miniconda 安装。
这份 conda 速查表非常有用,conda 文档也一样。
conda 最初是作为“科学 Python”的流行发行版 Anaconda distribution 的 Python 包管理器而创建的,后来被通用化并不断扩展。
conda 环境与 venv 类似,关键区别在于 conda 除了 Python 之外,还能为许多其他编程语言创建虚拟环境并安装包。
conda 支持的语言包括 R、JavaScript、Ruby、Fortran、C/C++、Scala、Java 等。
想比较 conda 和 venv 的命令,可以查看 conda 的命令参考。
要创建 conda 环境,请输入以下命令,把 {name of environment} 换成你选定的名称,把 python={version} 换成你想要的 Python 版本。
后面还可以跟上你想在环境里安装的其他包:
$ conda create --name {name of environment} python={version} "pytest>6.0" pylint
...
## Package Plan ##
environment location: /usr/local/anaconda3/envs/test_env
added / updated specs:
- pylint
- pytest[version='>6']
- python=3.10
The following packages will be downloaded:
package | build
---------------------------|-----------------
astroid-2.11.1 | py310h2ec42d9_0 364 KB conda-forge
dill-0.3.4 | pyhd8ed1ab_0 62 KB conda-forge
lazy-object-proxy-1.7.1 | py310he24745e_0 32 KB conda-forge
....
additional packages here
....
------------------------------------------------------------
Total: 21.8 MB
Proceed ([y]/n)? y
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
# $ conda activate test_env
#
# To deactivate an active environment, use
#
# $ conda deactivate
在 Windows 上创建 conda 环境使用的命令与 Linux/MacOS 基本相同。
不过,建议使用 Anaconda 的 cmd 或 powershell 提示符,而不是把 conda 加入 PATH:
(base) PS C:\Users\foobar> conda create --name {name_of_environment} python={version} "pytest>6" pylint
...
Collecting package metadata (current_repodata.json): done
Solving environment: done
## Package Plan ##
environment location: C:\ProgramData\Anaconda3\envs\test_env
added / updated specs:
- pylint
- pytest[version='>6']
- python=3.10
The following packages will be downloaded:
package | build
---------------------------|-----------------
astroid-2.11.1 | py310h5588dad_0 364 KB conda-forge
attrs-21.4.0 | pyhd8ed1ab_0 49 KB conda-forge
bzip2-1.0.8 | h8ffe710_4 149 KB conda-forge
...
additional packages here
...
------------------------------------------------------------
Total: 37.5 MB
Proceed ([y]/n)? y
...
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
# $ conda activate test_env
#
# To deactivate an active environment, use
#
# $ conda deactivate
用 uv 处理项目:uv
uv 是 Astral 用 Rust 编写的 Python 包与项目管理工具。
它的设计目标是取代 pip、venv、poetry 以及其他 Python 打包和依赖管理工具。
与 Conda 或 Mamba 不同,uv 只专注于 Python。
不过,uv 确实支持构建用 Fortran 等其他语言编写的 Python 扩展模块。
Astral 也是流行的 Ruff linter 和 TY(一个用于 Python 类型提示的静态类型检查器)的开发者,两者都用 Rust 编写。
这里就不展开细讲了,UV 文档是你了解安装和配置的最佳来源。
文档和背景资料:virtualenvwrapper。
virtualenvwrapper 包在 venv 之上工作,让你能在一个地方管理所有虚拟环境。
你可以用 lsvirtualenv(列出所有环境)和 mkvirtualenv(创建一个环境)这类类 Unix 命令来创建、复制、删除和切换环境。
它还允许你通过扩展添加额外的管理工具。
你甚至可以通过这个教程为它编写自己的扩展。
pyenv 是流行的 rbenv/ruby-build 工具为 Python 修改而来的分支。
它本质上是一组脚本和 shim,让你可以在全局和用户级别设置 Python 版本。
它力求遵循 Unix 的传统:一个单一用途、不张扬的工具,把一件事做好。
pyenv 以及 pyenv 文档可以在 GitHub 上找到。
Visual studio code (VS Code) 是 Microsoft 推出的免费代码编辑器。
它对虚拟环境/conda 环境以及 docker(通过 docker 插件)都提供了出色的支持,还能通过许多不同的插件扩展出测试、代码检查、格式化和 Web 开发等功能。
扩展 ID:ms-python.python

Microsoft 的 Python 扩展 是 Microsoft 官方的 VS Code Python 扩展,强烈推荐安装。 它功能丰富,包括环境管理、测试管理、代码检查和调试。 从最新版本开始,安装 MS Python 扩展时还会一并下载 pylance(一个用于检查和验证 Python 代码的流行包)和 jupyter(用于处理 Jupyter Notebook)。
PyCharm 是 JetBrains 打造的集成开发环境(IDE)。
它为 Python 量身打造,在专业人士中很受欢迎。
和 VS Code 一样,它可以通过各种付费和免费插件、主题和格式化工具进行扩展。
付费版还支持 Django 开发、Docker 开发 和数据库集成。
pytest 的 coverage 插件会破坏 PyCharm 的调试器。
更多信息见运行/调试配置:pytest。Spyder 是一款面向科学社区的跨平台、免费开源 Python 集成开发环境。 它通常随 Anaconda 的 Python 发行版一起提供,但也可以单独安装,并与任意版本的 Python 搭配使用。 我们推荐单独安装,以确保最大的灵活性,并避免包冲突。
Spyder 完全支持 venv 和 conda 环境。
它内置 IPython 交互式终端和交互式调试器,并强大地支持在编辑器内绘图和数据探索。
额外的代码补全和检查由 kite 提供。
与 Jupyter Notebooks 和测试工具的集成由社区开发的插件提供。
你也可以使用 Spyder API 编写自己的插件。
Spyder 常见问题
在 Spyder 中设置 Python 版本/虚拟环境
通过 spyder unittest 插件设置 Spyder 来运行 unittest 和 pytest 测试
其他 spyder 插件
Emacs 是一款用 Lisp 编写的免费、开源、高度可定制的文本编辑器。 Real Python 上有一份很棒的安装和设置指南。
Vim 是 Unix 标准 vi 文本编辑器的免费“改进”版本。
它可用于各种各样的操作系统和 Linux/Unix 发行版。
Real Python 上有一份很棒的安装和设置指南,vimsheet、glump 和 rtorr 上也有便捷的速查表。
即使你决定不用 vim 编辑 Python 代码,也建议你熟悉一组基本命令。
在 Linux 和 Unix 发行版中,vim 或 vi 常常是“基础”或“默认”文本编辑器,在这些系统上它还是 git 提交信息(以及其他东西)的默认编辑器。
你很可能遇到这种情况:在一台 *nix 系统上,手头只有 vi 可用,却需要编辑一个配置文件。所以,懂得如何退出 vim(至少)是一项不错的防身技能。
Spacemacs(github 仓库)是一个由社区驱动的免费 Emacs 发行版,融合了 Emacs 和 Vim 的功能。
Sublime text 是一款付费的编程文本编辑器,由 Sublime HQ Pty Ltd 出品。 它类似于 VS Code 和 Atom,有许多包和插件可供定制。 你还可以用 Python 为这个编辑器开发自己的插件。