+++ title = "Windows系列(5):Python开发配置" date = 2024-05-31 [taxonomies] tags = ["Windows"] +++ 前言 由于 Windows 中开发环境较 linux 复杂,这里总结 Windows 中使用 Jupyter 开发 Python 的环境配置。 ## 安装 Python是一种跨平台的编程语言,社区生态丰富,有许多现成的包可以调用。传统的安装方法如下: - 下载、安装Pythond解释器; - 验证安装; - 安装VScode以及Python的拓展; 但Python开发项目时往往需要不同版本,不同的第三方包,如果用传统方法难以管理;因此现在的主流方法是: - 安装Anaconda或miniconda等Python集成包; - 使用conda创建并启动一个Python环境; - 安装jupyter编辑器编写python。 在[Anaconda官网](https://www.anaconda.com/)下载并安装,安装成功后,命令行中敲``conda info``,会显示conda的版本和python的版本等详细信息;再敲``conda list``,会列出当前环境下所有安装的包。 安装好了Anaconda,就相当于同时有了Python、环境管理器、包管理器以及一大堆开箱即用的科学计算工具包。 > linux中安装Miniconda ```bash # Miniconda安装脚本 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh # 执行以下命令启动安装程序: bash Miniconda3-latest-Linux-x86_64.sh # 验证安装 conda --version ``` ## 使用 - 创建环境,后面的python=3.6是指定python的版本 ```bash conda create --name env_name python=3.6 ``` - 创建包含某些包的环境(也可以加上版本信息) ```bash conda create --name env_name python=3.7 numpy scrapy ``` - 激活某个环境 ```bash conda activate env_name ``` - 关闭某个环境 ```bash conda deactivate env_name ``` - 复制某个环境 ```bash conda create --name new_env_name --clone old_env_name ``` - 删除某个环境 ```bash conda remove --name env_name --all ``` - 生成需要分享环境的yml文件(需要在虚拟环境中执行) ```bash conda env export > environment.yml ``` - 在本地使用yml文件创建虚拟环境 ```bash conda env create -f environment.yml ``` - 列出本机的所有环境,如下,可见当前有2个环境,当前激活的是test环境: ```bash (test) ➜ ~ conda info -e - conda environments: # base /Volumes/300g/opt/anaconda3 test * /Volumes/300g/opt/anaconda3/envs/test ``` ### 包管理 - 列出当前环境下所有安装的包 ```bash conda list ``` - 列举一个指定环境下的所有包 ```bash conda list -n env_name ``` - 查询库 ```bash conda search scrapys ``` - 安装库安装时可以指定版本例如:(scrapy=1.5.0) ```bash conda install scrapy ``` - 为指定环境安装某个包 ```bash conda install --name target_env_name package_name ``` - 更新安装的库 ```bash conda update scrapy ``` - 更新指定环境某个包 ```bash conda update -n target_env_name package_name ``` - 更新所有包 ```bash conda update --all ``` - 删除已经安装的库 ```bash conda remove scrapy ``` - 删除指定环境某个包 ```bash conda remove -n target_env_name package_name ``` - 更多命令请查看官方文档或者查询帮助命令: ```bash conda --help conda install --help ``` ## Jupyter使用 安装Anaconda并启动一个环境之后,如何让Jupyter Notebook在我们要的环境中启动呢? - 安装jupyter ```bash conda install jupyter notebook ``` - 配置虚拟机中允许宿主机访问 ```bash # 生成配置 jupyter notebook --generate-config # 编辑配置 nano ~/.jupyter/jupyter_notebook_config.py # 写入这三行 c.NotebookApp.ip = '0.0.0.0' # 允许任何 IP 访问 c.NotebookApp.port = 8888 # 指定端口 c.NotebookApp.open_browser = False # 不自动开浏览器 # 重启jupyter jupyter notebook ``` - 安装 ipykernel 为了让 Jupyter Notebook 能识别该环境中的 Python 解释器,你需要在该环境中安装 ipykernel: ```bash conda install ipykernel ``` - 注册环境内核 将该环境注册为 Jupyter 的一个内核(kernel),这样启动 Jupyter Notebook 后就能选择这个内核: ```bash python -m ipykernel install --user --name myenv --display-name "Python (myenv)" ``` 这里 --name 指定内核的名称,--display-name 是在 Jupyter Notebook 界面中显示的名称,你可以根据需要自定义。 - 启动 Jupyter Notebook:依然在激活后的环境中,启动 Jupyter Notebook;启动后,你在新建 notebook 时可以选择刚刚注册的内核 “Python (myenv)” 来确保使用该环境的 Python 解释器。 ```bash jupyter notebook ``` - 汉化jupyter(可选) Jupyter Notebook 本身没有官方语言包,但可以用第三方扩展 ``jupyter_contrib_nbextensions``和``notebook-translation``来实现部分汉化 ```bash pip install jupyter_contrib_nbextensions jupyter contrib nbextension install --user pip install jupyter-notebook-translation ``` > 当然,你也可以使用其他编辑器/IDE如 Sublime Text 或者 JetBrains 系列的 PyCharm 。 ## 使用 UV 替代 Conda > UV(由 Astral 团队开发)是一个用 Rust 编写的高性能 Python 包管理器,提供类似 Conda 的虚拟环境管理和依赖解析功能,在大多数场景下比 pip 和 Conda 快 10–100 倍。它通过命令行工具如 `uv venv`(创建/管理虚拟环境)和 `uv pip`(安装/锁定/同步依赖)覆盖传统的 Conda 流程,但本身不管理底层的 C/C++ 库,因此对于 GDAL、SciPy 等需要系统级二进制依赖的包,仍建议先通过系统包管理器或 Conda 安装,然后用 UV 管理 Python 包。 --- - 安装 UV ```bash wget -qO- https://astral.sh/uv/install.sh | sh ``` - 创建与管理环境 ```bash # 创建虚拟环境,指定 Python 版本 uv venv --python 3.12 # 激活环境 source .venv/bin/activate # 退出环境 deactivate # 删除环境 rm -rf .venv ``` - 直接运行 ```bash uv run python uv run jupyter lab ``` - 注册 Jupyter 内核 ```bash uv run python -m ipykernel install --user --name bank --display-name "Python (bank)" ``` --- - 安装依赖 ```bash uv add tensorflow uv pip install requests fastapi uvicorn sqlalchemy ``` > 安装完成后,UV 会自动更新 `uv.lock` 文件锁定依赖版本,保证环境可复现。 - 使用 TOML 配置管理依赖 创建一个 `pyproject.toml`: ```toml [tool.uv.dependencies] fastapi = "*" uvicorn = "*" sqlalchemy = "*" ``` 然后同步环境: ```bash uv pip sync ``` 这会根据 `pyproject.toml` + `uv.lock` 安装和锁定所有依赖。 - 查看与卸载包 ```bash uv pip list # 列出已安装包 uv pip uninstall numpy ``` - 更新UV自身 ```bash uv self update ``` --- ### 替代常见 Conda 工作流 | Conda 操作 | UV 对应 | | -------------------------------- | ------------------------------------------------- | | `conda create -n env python=3.x` | `uv venv --python 3.x` | | `conda activate env` | `source .venv/bin/activate` 或 `uv venv activate` | | `conda install pkg1 pkg2` | `uv pip install pkg1 pkg2` | | `conda env export > env.yml` | 自动生成 `uv.lock` 或 `uv pip compile requirements.in` | | `conda env update -f env.yml` | `uv pip sync`(根据 `uv.lock` 或 `pyproject.toml` 同步) | | `conda list` | `uv pip list` | ## ipynb转markdown 首先安装 nbformat 和 nbconvert包: ```bash conda install nbformat nbconvert -y touch ipynb2md.py && nano ipynb2md.py ``` 写入以下脚本: ```python import nbformat from nbconvert import MarkdownExporter from pathlib import Path def ipynb_to_md(ipynb_path: Path, output_dir: Path): """单个 ipynb 转 md""" with open(ipynb_path, "r", encoding="utf-8") as f: nb = nbformat.read(f, as_version=4) exporter = MarkdownExporter() body, resources = exporter.from_notebook_node(nb) output_file = output_dir / (ipynb_path.stem + ".md") with open(output_file, "w", encoding="utf-8") as f: f.write(body) print(f"✔ 转换完成: {ipynb_path} -> {output_file}") def batch_convert(input_dir: str, output_dir: str = "markdown_output"): input_dir = Path(input_dir) output_dir = Path(output_dir) output_dir.mkdir(parents=True, exist_ok=True) for ipynb_file in input_dir.glob("*.ipynb"): ipynb_to_md(ipynb_file, output_dir) if __name__ == "__main__": # 修改这里的目录路径即可 batch_convert(input_dir=".") ``` 运行脚本: ```bash python ipynb2md.py ``` 脚本会自动扫描当前目录下的所有 .ipynb 文件,并把 .md 文件输出到 markdown_output/ 文件夹。 --- **Done.**