本文旨在记录一套基于工具职责分离和环境隔离理念的现代Python开发环境配置流程,适用于Windows/Linux/macOS。
如果对Python环境管理不熟悉的朋友请先看我的这篇文章:《透彻理解Python环境管理:虚拟环境、Conda、Pyenv和Pipx为何而生》
一、 基础层:安装系统级Python解释器
从 Python官网 下载最新稳定版的安装包。运行安装程序,务必勾选
选项,将解释器添加到系统环境变量。验证安装:打开新的终端(Cmd/PowerShell/Terminal),输入
Add python.exe to PATH
和
python --version
,应能正确显示版本号。
pip --version
此Python环境应保持“清洁”,仅用于安装全局管理工具。
二、 全局工具层:用Pipx隔离所有CLI应用
目标:安全地安装像
、
hatch
、
black
这样的全局命令行工具,避免它们之间的依赖冲突。
httpie
安装Pipx:
pip install pipx
配置Pipx(可选但推荐):创建系统环境变量,让Pipx的所有文件规整到指定位置。
:
PIPX_HOME
(自定义路径,存放每个工具的虚拟环境)
D:Developmentpipxvenvs
:
PIPX_BIN_DIR
(自定义路径,存放所有工具的启动脚本) 将
D:Developmentpipxin
的路径添加到系统的
PIPX_BIN_DIR
环境变量中。使用Pipx安装工具,例如安装Hatch:
PATH
pipx install hatch
此后,
命令即可在全局终端中使用,且其依赖与系统完全隔离。
hatch
三、 解释器管理层:按需选择Pyenv或Conda
目标:为不同项目提供所需的Python版本解释器。
方案A:轻量纯Python之选 – Pyenv
安装pyenv-win(Windows)或
(Unix)。配置系统环境变量:
pyenv
:
PYENV
(你的pyenv安装目录)
D:Developmentpyenv-win
:
PYTHON_BUILD_MIRROR_URL
(国内镜像,加速下载) 将
https://npmmirror.com/mirrors/python/
和
%PYENV%shims
添加到系统
%PYENV%in
环境变量的最后面。
PATH
注意:此处放在最后面是为了全局
默认使用上面基础层的主
cmd
环境。当然也可以不安装系统级的主
Python
环境,从
Python
这个
pyenv-win
管理器中选择一个作为主
Python
环境。需要明白的是
Python
不是完整功能的
pyenv-win
版本,缺少标准库中的
Python
图形界面模块 使用:
GUI
安装解释器。
pyenv install 3.10.12
方案B:科学计算之选 – Miniconda/Anaconda
安装Miniconda(推荐,更轻量)。安装时勾选“添加至PATH”,安装后重启终端。使用:
创建包含指定Python版本的环境。
conda create -n py310 python=3.10
四、 项目层:用Hatch管理项目与虚拟环境
目标:为每个项目创建隔离的依赖环境,并标准化项目管理。对于科学计算类项目,实现与Conda优化库的强强联合。
Hatch全局配置(
或
%USERPROFILE%.hatchconfig.toml
):
~/.hatch/config.toml
# 指定虚拟环境创建在项目根目录下的.venv文件夹,便于IDE识别
[dirs]
data = ".venv"
cache = ".venv/Cache"
# 配置私有PyPI仓库(认证信息建议放在~/.pypirc)
[publish.index.repos.local]
url = "http://localhost:8089/repository/xc-py-hosted/"
# user = "admin"
# auth = "123456"
注意:此处配置全局本地
仓库信息可以放开
nexus
,
user
注释。如果是配置远程仓库不建议在此处配置,可以配置到
auth
中。我更建议远程仓库每次推送手动输入认证信息
.pypirc
创建新项目:
hatch new my_project
cd my-project
会在当前目录生成
许可证模版文件,生成路径与Hatch的
.venv/Cache/licenses/MIT.txt
配置路径相关,此文件用于自动生成
[dirs]->cache
许可证文件内容。此目录和模版文件生成后可删除可保留会在当前目录生成
my-project/LICENSE.txt
文件夹,其中是自动生成的项目骨架(目录结构和项目文件)注意:项目名是
my-project/
,Hatch会遵循
my_project
的
Python
命名规范,自动把下划线转化为连字符即
PEP8
,
my-project
命令行为是硬编码的,无法修改除非改底层实现。大部分项目名依然习惯使用下划线,推荐大家使用下划线项目命名。只需把
hatch new
、
my-project/
、
my-project/README.md
的文件名和文件内容中的
my-project/project.toml
改为
my-project
即可
my_project
高级技巧:Hatch与Conda强强联合
对于数据科学、AI项目,可以利用Conda安装优化过的基础库,再让Hatch接管虚拟环境管理。
此方案的核心是:让Conda充当一个提供高性能基础库的“基石”,然后让Hatch在其之上创建项目虚拟环境,并继承(共享)这些基础库。
a. 用Conda创建“基石”环境
这个环境仅包含Python解释器和你希望被所有相关项目共享的、性能关键的基础库(通常是那些带有C扩展的科学计算库)。
# 创建一个名为“sci-base”的环境,安装Python和优化的科学套件
conda create -n sci-base python=3.10 numpy scipy pandas matplotlib
# 激活它以验证安装
conda activate sci-base
python -c "import numpy; print(numpy.__file__)" # 确认numpy来自conda目录
conda deactivate
b. 配置Hatch项目以继承“基石”环境
修改项目中的
文件,让Hatch在创建虚拟环境时,不仅使用Conda环境的Python解释器,更重要的是继承其所有的第三方库。
pyproject.toml
[tool.hatch.envs.default]
# 1. 指定使用我们创建好的Conda环境中的Python解释器
python = "/path/to/your/miniconda3/envs/sci-base/python.exe" # Windows示例
# python = "/home/username/miniconda3/envs/sci-base/bin/python" # Linux/macOS示例
# 2. 【关键】配置虚拟环境继承(共享)Conda环境的site-packages
# 这确保了Hatch环境能直接使用conda安装的优化版numpy, scipy等
features = ["system-packages"]
# 3. 声明项目所需的、但Conda基础环境中没有的依赖
# 这些纯Python包将由Hatch/pip在项目虚拟环境中安装
dependencies = [
"requests", # HTTP库
"flask", # Web框架
"rich", # 命令行美化
"sqlalchemy", # ORM
# ... 其他你的项目需要的纯Python包
]
注意:如果仅指定
版本,不使用
Conda Python
继承其环境,那么只会得到一个
system-packages
版本的解释器、标准库以及其自包含的底层依赖(如ssl、sqlite等),是一个“自包含”的单元,与系统库隔离的环境,不会有其优化过的第三方库
Conda Python
c. 安装并验证
# 在项目根目录执行,Hatch会根据配置创建环境
hatch env create
# 进入Hatch创建的环境shell
hatch shell
# 验证:现在检查numpy,它应该来自conda的“sci-base”环境
python -c "import numpy; print(numpy.__file__)"
# 输出路径应指向 .../miniconda3/envs/sci-base/... 而不是 .../.venv/...
# 同时,requests等包也被安装在了当前项目的.venv中
python -c "import requests; print(requests.__file__)"
# 输出路径应指向 .../my-project/.venv/...
为什么这是最佳实践?
性能最大化:核心科学计算库(
,
numpy
,
pandas
)使用Conda提供的Intel MKL优化版本,性能远超PyPI的通用版本。环境稳定:复杂的二进制依赖关系由Conda解决,避免了用pip编译这些库可能带来的各种错误。管理清晰:依赖来源泾渭分明。底层、复杂的、性能关键的库用
scipy
管理;上层、纯Python的应用库用
conda
/
hatch
管理。项目可移植:
pip
完整定义了项目环境,任何克隆项目的人都能一键复现完全相同的环境结构。
pyproject.toml
这种“Conda提供基础栈,Hatch管理项目环境并继承基础栈”的模式,是数据科学和机器学习领域兼顾性能与开发规范的黄金标准。
总结
这套配置流程的核心思想是隔离与专精:
系统Python:干净,仅用于安装
。Pipx:隔离管理所有全局CLI工具。Pyenv/Conda:管理Python解释器本身(Pyenv轻量,Conda强大)。Hatch:管理项目及其依赖环境,并能与上述所有工具无缝协作。
pipx
遵循此方案,你将拥有一个清晰、稳定、高效、系统化且可复现的Python开发环境,彻底告别依赖冲突的烦恼。