# Dich'blog

# Windows系列(5):Python开发配置

2024-05-31
:: tags: #Windows

前言 由于 Windows 中开发环境较 linux 复杂，这里总结 Windows 中使用 Jupyter 开发 Python 的环境配置。

## 安装

Python是一种跨平台的编程语言,社区生态丰富，有许多现成的包可以调用。传统的安装方法如下：

- 下载、安装Pythond解释器；
- 验证安装；
- 安装VScode以及Python的拓展；

但Python开发项目时往往需要不同版本，不同的第三方包，如果用传统方法难以管理；因此现在的主流方法是：

- 安装Anaconda或miniconda等Python集成包；
- 使用conda创建并启动一个Python环境；
- 安装jupyter编辑器编写python。

在Anaconda官网下载并安装，安装成功后，命令行中敲`conda info`，会显示conda的版本和python的版本等详细信息；再敲`conda list`，会列出当前环境下所有安装的包。

安装好了Anaconda，就相当于同时有了Python、环境管理器、包管理器以及一大堆开箱即用的科学计算工具包。

## 使用

安装好了，默认是在base虚拟环境下，此时我们从base环境复制一份出来，在新环境里工作。

- 复制base环境, 创建test环境

    conda create --name test --clone base

- 激活test环境

    conda activate test

- 取消Conda默认激活base虚拟环境

    conda config --set auto_activate_base false

- 列出本机的所有环境，如下，可见当前有2个环境，当前激活的是test环境：

    (test) ➜  ~ conda info -e
    - conda environments:
    #
    base                     /Volumes/300g/opt/anaconda3
    test                  *  /Volumes/300g/opt/anaconda3/envs/test

- Anaconda默认安装了jupyter，打开jupyter：

    jupyter notebook

此时会自动弹出浏览器窗口打开Jupyter Notebook网页，默认为`http://localhost:8888`

> Jupyter汉化/下载中文包：`pip install jupyterlab-language-pack-zh-CN`

### 虚拟环境管理

- 创建环境，后面的python=3.6是指定python的版本

    conda create --name env_name python=3.6

- 创建包含某些包的环境（也可以加上版本信息）

    conda create --name env_name python=3.7 numpy scrapy

- 激活某个环境

    conda activate env_name

- 关闭某个环境

    conda deactivate

- 复制某个环境

    conda create --name new_env_name --clone old_env_name

- 删除某个环境

    conda remove --name env_name --all

- 生成需要分享环境的yml文件（需要在虚拟环境中执行）

    conda env export > environment.yml

- 别人在自己本地使用yml文件创建虚拟环境

    conda env create -f environment.yml

### 包管理

- 列出当前环境下所有安装的包

    conda list

- 列举一个指定环境下的所有包

    conda list -n env_name

- 查询库

    conda search scrapys

- 安装库安装时可以指定版本例如：（scrapy=1.5.0）

    conda install scrapy

- 为指定环境安装某个包

    conda install --name target_env_name package_name

- 更新安装的库

    conda update scrapy

- 更新指定环境某个包

    conda update -n target_env_name package_name

- 更新所有包

    conda update --all

- 删除已经安装的库

    conda remove scrapy

- 删除指定环境某个包

    conda remove -n target_env_name package_name

- 更多命令请查看官方文档或者查询帮助命令：

    conda --help

    conda install --help

有了Conda包管理器，为什么Anaconda环境中，可能还需要用pip安装包呢？因为Anaconda本身只提供部分包，远没有pip提供的包多，有时conda无法安装我们需要的包，此时需要用pip将其装到conda环境里。

安装特定版本的包，conda用=，pip用==。例如：

    conda install xxx=1.0.0
    pip install xxx==1.0.0

## Jupyter使用

安装Anaconda并启动一个环境之后，如何让Jupyter Notebook在我们要的环境中启动呢？

- 激活目标环境

    conda activate myenv

- 安装 ipykernel（如尚未安装） 为了让 Jupyter Notebook 能识别该环境中的 Python 解释器，你需要在该环境中安装 ipykernel：

    conda install ipykernel

    # 或者使用 pip

    pip install ipykernel

- 注册环境内核 将该环境注册为 Jupyter 的一个内核（kernel），这样启动 Jupyter Notebook 后就能选择这个内核：

    python -m ipykernel install --user --name myenv --display-name "Python (myenv)"

    # 这里 --name 指定内核的名称，--display-name 是在 Jupyter Notebook 界面中显示的名称，你可以根据需要自定义。

- 启动 Jupyter Notebook：依然在激活后的环境中，启动 Jupyter Notebook：

    jupyter notebook

- 启动后，你在新建 notebook 时可以选择刚刚注册的内核 “Python (myenv)” 来确保使用该环境的 Python 解释器。

> 当然，你也可以使用其他编辑器/IDE如 Sublime Text 或者 JetBrains 系列的 PyCharm 。

> linux中使用Miniconda

    # Miniconda安装脚本
    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
    # 执行以下命令启动安装程序：
    bash Miniconda3-latest-Linux-x86_64.sh
    # 验证安装
    conda --version

## 使用UV替代Conda

> UV（由 Astral 团队开发）是一个用 Rust 编写的高性能包管理器，提供了类似 Conda 的虚拟环境管理和依赖解析功能，并且在大多数场景下比 pip 和 Conda 快 10–100 倍。它通过命令行工具如 uv venv（创建/管理虚拟环境）和 uv pip（安装/锁定/同步依赖）来覆盖传统的 conda create、conda install、conda env export 等操作，但本身并不管理底层的 C/C++ 库，因此对于诸如 GDAL、SciPy 等需要系统级二进制依赖的包，仍建议在 Conda/系统包管理器中预装相关库，然后用 UV 来管理 Python 包。

安装与激活

    wget -qO- https://astral.sh/uv/install.sh | sh

- 在当前目录下创建 .venv，使用系统默认 Python（若不存在则自动下载）

    uv venv

- 指定环境名称或路径

    uv venv myenv

- 指定 Python 版本（需系统已有或可下载）

    uv venv --python 3.11

- 激活

    source .venv/bin/activate

安装包

    # 安装单个包
    uv pip install requests

    # 批量安装并自动锁定依赖
    uv pip install fastapi uvicorn sqlalchemy

生成与同步锁文件

    # 从 requirements.in 生成统一依赖文件
    uv pip compile docs/requirements.in \
       --universal \
       --output-file docs/requirements.txt

    # 根据锁文件同步环境
    uv pip sync docs/requirements.txt

此流程替代 `conda env export` + `conda env update`，并保证跨平台一致性 ([GitHub][3])。

查看与卸载

    uv pip list       # 列出已安装包（类似 conda list）
    uv pip uninstall numpy

替代常见 Conda 工作流

Conda 操作 | UV 对应
--- | ---
`conda create -n env python=3.x` | `uv venv --python 3.x`
`conda activate env` | `source .venv/bin/activate` 或 `activate`
`conda install pkg1 pkg2` | `uv pip install pkg1 pkg2`
`conda env export > env.yml` | `uv pip compile requirements.in`
`conda env update -f env.yml` | `uv pip sync requirements.txt`
`conda list` | `uv pip list`

最佳实践：

1. 系统依赖：用 Conda/Mamba 安装较难编译的 C 库（`conda install gdal`）。
2. Python 包：用 UV 管理所有纯 Python 依赖（`uv pip install pandas scikit-learn`）。
3. 统一锁定：把 `uv pip compile` 生成的 `requirements.txt` 放入版本控制，确保团队环境一致。

Done.

Thanks for reading! Read other posts?

← Windows系列(6):C/C++开发配置 乱七八糟:计算机科学优质视频 →