管理模块的模块。如:
importlib:【标准库】解释器所使用的导入机制的底层实现zipimport:【标准库】从 zip 文件中导入模块或包。pkgutil:标准库,便捷地访问资源文件的接口pip:首选 + 必备 ,安装和管理 Python 包的工具,从 PyPi 这一官方第三方模块仓库源里搜索、下载、安装。Anaconda:一个基于 Python 的数据处理和科学计算平台,相当于数十个有用的常用的第三方库。全家桶,OUT venv:【标准库】New in Python 3.3,标准库内置的虚拟环境管理工具,解决不同应用间多版本冲突。virtualenv:Python 虚拟环境管理工具,已被 venv 挤下大佬位。OUT pipreqs:扫描项目所使用的库,自动生成依赖清单(好像不太准的样子,没有安装的包也会检测出来)。pipdeptree:显示当前环境下的 pip 依赖树概述 最佳实践
pyproject.toml:项目的唯一配置入口 uv:项目的库管理 虚拟环境:隔离项目依赖 pyproject.toml 1 2 3 4 5 6 7 8 9 10 [project] name = "my_project" version = "0.1.0" dependencies = [ "flet>=0.85.1, ] [build-system] requires = [" setuptools", " wheel"] build-backend = " setuptools.build_meta"
模块 Python 的 import 机制是由标准库的模块集合实现的。 虚拟环境 virtual environment:虚拟环境:一种采用协作式隔离的运行环境,允许 Python 用户和应用程序在安装和升级 Python 包时不会干扰到同一系统上运行的其他 Python 应用程序的行为。即同一系统下两个项目可使用不同的 Python 程序与 Python 包。
importlib importlib:【标准库】解释器所使用的导入机制的底层实现
zipimport:【标准库】从 zip 文件中导入模块或包。
zipimport 常用来加载 Python EGG 文件或作为便捷的打包和分发应用的方式importlib 常用于动态导入,用在插件或应用程序的扩展上1 2 3 4 5 6 7 8 9 10 11 12 import importlibimport my_moduleimportlib.reload(os) import importlibdef reload_module (module_name ): module = importlib.import_module(module_name) importlib.reload(module) return module
pkgutil pkgutil:标准库,便捷地访问资源文件的接口
pip 最佳实践 pip:首选 + 必备 ,安装和管理 Python 包的工具,从 PyPi 这一官方第三方模块仓库源里搜索、下载、安装。
Anaconda:一个基于 Python 的数据处理和科学计算平台,相当于数十个有用的常用的第三方库。全家桶,OUT
曾经看一个说法,大致是:Anaconda 解决了一些我本可以解决的问题,并引入了一些我不知道的问题。And pip 是官方正统,so, Anaconda, shit. 安装 1 2 # yay -S python38 时没有装上 pip,运行下面命令安装即可 python3.8 -m ensurepip --default-pip
1 2 下载: get-pip.py:https://bootstrap.pypa.io/get-pip.py 安装:./python.exe get-pip.py
优化 1 2 3 4 5 6 7 8 9 10 # 清华源(当前首选) pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple # 豆瓣源(相对较快) pip config set global.index-url https://pypi.douban.com/simple # 阿里云源 pip config set global.index-url https://mirrors.aliyun.com/pypi/simple # 腾讯云源 pip config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple # 华为源 pip config set global.index-url https://repo.huaweicloud.com/simple
1 2 pip install -i https://pypi.douban.com/simple {module_name}
设置 1 2 3 4 5 6 7 8 9 # 多版本设置指定版本的 pip 为默认 pip -V # 查看当前版本 vi .bashrc # 在最后添加 alias python=python3.8 alias pip="python3.8 -m pip" alias py=python3
安装模块 正常来说:所有第三方的包都会被 pip 安装到 Python3 的 site-packages 目录下。
标准库:<module 'os' from '/usr/lib/python3.8/os.py'><module 'pip' from '/usr/lib/python3/dist-packages/pip/__init__.py'> 第三方库:<module 'torch' from '/home/user_name/.local/lib/python3.8/site-packages/torch/__init__.py' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 pip install pkg [==version][>=version][<=version] pip install pkg>=2.1.2 # 通过关键字搜索相关模块 pip search numpy # 下载但不安装 pip download numpy1 # 从指定地方安装 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install flet[all]==0.25.0.dev3668 --upgrade pip install --force-reinstall:在安装之前如果已安装,将先卸载它,与为包及每个依赖包运行pip uninstall -u dep && pip install dep几乎相同 pip install --ignore-installed: 忽略软件包及其依赖项是否已安装,覆盖已安装的文件(按需使用,尽量不用,不然可能会在sys.path中有老版本的模块,导入时可能会报错) # 清空系统中的pip包的缓存 pip cache purge # 强制安装,忽略依赖关系rr pip install --no-dependencies package_name pip install --no-index --no-dependencies -f ./ ultralytics-8.3.77-py3-none-any.whl
下载模块 1 2 3 4 pip download --platform anylinux_x86_64 # 指定平台信息 --no-depth on # on表示不下载依赖包 -d pkg_dir/ # 下载文件的目录 -r requirements.txt #
卸载模块 1 2 3 4 5 pip uninstall numpy # 卸载所有模块 pip freeze>modules.txt pip uninstall -r modules.txt -y
查看模块 1 2 3 4 5 6 pip list # 查看当前安装 pip show flask # 查看指定模块信息 pip list --outdated # 待更新模块 # 更新包 pip install -U numpy pip install --upgrade numpy
依赖文件 用于记录所有依赖包及精确的版本号,以便在新环境里进行部署 requirements.txt 中不能带有中文,否则会报 UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 370: illegal multibyte sequence 错误 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 pipreqs ./ --encoding=utf-8 # 当前环境(虚拟环境 or 全环境)中依赖包及版本号生成 pip freeze > requirements.txt # 安装依赖文件 requirements.txt 里的所有 Python 模块 pip install -r requirements.txt # 确保当前环境软件包的版本(并不确保安装) pip install -c constraints.txt pip download --destination-directory /path_to_wheels -r requirements.txt # 从/local/wheels 中查找包来安装 # /path_to_wheels用绝对路径,之前用相对路径有报过找不到对应whl的q pip install --no-index --find-links=/path_to_wheels -r requirements.txt # -d /data/pkgs/
遇到的问题 问题:pip3 install –no-index –find-links= Url ‘./Test/flask’ is ignored. It is either a non-existing path or lacks a specific scheme. 解决方案:用 os.system 来运行这个有问题,需要换成绝对路径 WARNING: The script streamlit is installed in '/home/user_name/.local/bin' which is not on PATH. Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location. 问题:Ubuntu 24.04,在使用 pip 时,报 error: externally-managed-environment 解决方案: 1 2 3 4 cd /usr/lib/python3.12 sudo rm EXTERNALLY-MANAGED # 需要恢复时: sudo touch EXTERNALLY-MANAGED
conda conda:Miniconda 与 Anaconda 的核心都是 Conda。它集成了软件包管理和环境管理
软件包管理:软件包下载安装、升级、依赖管理等 环境管理:创建不同的虚拟环境,安装不同版本的包且互不干扰 配置清华源 1 2 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --set show_channel_urls yes
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # 创建环境 conda create -n env_name # 激活 conda activate env_name # 退出 conda deactivate # 删除已有环境 conda remove -n env_name --all # 查看已有环境 conda info -e # 安装/删除包 conda install pkg_name conda remove -n env_name pkg_name # 查看安装的包 conda list
遇到的问题 问题:终端默认进入 conda 的 base 环境 解决方法: 1 2 3 4 # 修改配置 conda config --set auto_activate_base false # 查看配置 conda config --show
venv venv:【标准库】New in Python 3.3,标准库内置的虚拟环境管理工具,解决不同应用间多版本冲突。
virtualenv:Python 虚拟环境管理工具,已被 venv 挤下大佬位。OUT pipenv:曾经不错的包管理工具,作者貌似已弃坑,OUT yolk:第三方库多版本选择 ,Python2 的,断更于 2012 年,OUT
一个 Python 安装可能无法满足每个应用程序的要求。如果应用程序 A 需要特定模块的 1.0 版本但应用程序 B 需要 2.0 版本,则需求存在冲突,安装版本 1.0 或 2.0 将导致某一个应用程序无法运行。 1 2 3 4 5 6 7 8 9 10 mkdir project1 cd project1 python -m venv project_venv # 创建虚拟环境,project_venv 为虚拟环境名字 # 建议将该文件夹加入.gitignore,以便让 Git 忽略 project_venv\Scripts\activate # Windows source ./project1_venv/bin/activate # Linux (project1_venv)$ pip install torch (project1_venv)$ deactivate
pipreqs pipreqs:扫描项目所使用的库,自动生成依赖清单(好像不太准的样子,没有安装的包也会检测出来)。
1 2 pip install pipreqs pipreqs ./ --encoding=utf-8 # windows 下可能有编码文件,需加个 encoding
pipdeptree pipdeptree:显示当前环境下的 pip 依赖树
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 pipdeptree ipython==7.14.0 - backcall [required: Any, installed: 0.1.0] - colorama [required: Any, installed: 0.4.3] - decorator [required: Any, installed: 4.4.2] - jedi [required: >=0.10, installed: 0.17.0] - parso [required: >=0.7.0, installed: 0.7.0] - pickleshare [required: Any, installed: 0.7.5] - prompt-toolkit [required: >=2.0.0,<3.1.0,!=3.0.1,!=3.0.0, installed: 3.0.5] - wcwidth [required: Any, installed: 0.1.9] - pygments [required: Any, installed: 2.6.1] - setuptools [required: >=18.5, installed: 41.2.0] - traitlets [required: >=4.2, installed: 4.3.3] - decorator [required: Any, installed: 4.4.2] - ipython-genutils [required: Any, installed: 0.2.0] - six [required: Any, installed: 1.14.0] pipdeptree --exclude pip,pipdeptree,setuptools,wheel pipdeptree -f | tee locked-requirements.txt pipdeptree --graph-output png > dependencies.png
poetry poetry:可以使用 pyproject.toml,而 pyptoject.toml 昌 PEP 中的内容,是将来的方向
pyproject.toml:Python 项目中的一个配置文件,类似于旧版本的 requirements.txt,用于声明项目所需的依赖项和版本号 1 2 3 [build-system] requires = ["poetry>=1.0.0" ]build-backend = "poetry.masonry.api"
1 2 3 4 5 6 7 8 9 poetry init poetry add requests # 安装声明的依赖 poetry install # pip 安装 toml文件中声明的依赖 pip install -r pyproject.toml
UV 最佳实践 uv:Astral 公司(Rust 工具 Ruff 的开发者)推出的高性能 Python 包管理工具
特点:极致的安装速度:基于 Rust 语言实现,比 pip 快 10-100 倍 整合了 pip、virtualenv、pip-tools 等工具的功能(支持 pyproject.toml 和 uv.lock 文件) 开发者友好智能缓存 :默认启用全局缓存,减少重复下载环境分组 :支持 --group dev 和 --group production 区分开发与生产依赖,类似 Node.js 的 devDependencies无缝迁移 :兼容现有 requirements.txt 和 pyproject.toml 文件,降低迁移成本 基本操作 配置下载加速 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 # 配置全局uv源,UV_DEFAULT_INDEX 环境变量 # Windows:我的电脑->属性->高级系统设置 -> 环境变量,系统变量/用户变量中新建 变量名: UV_DEFAULT_INDEX 变量值:https://pypi.tuna.tsinghua.edu.cn/simple # 用户级别源:%APPDATA%\uv\uv.toml [[index]] url = "https://pypi.tuna.tsinghua.edu.cn/simple" default = true # 项目级别源,项目目录下的 `pyproject.toml` 或 `uv.toml` # pyproject.toml [[tool.uv.index]] url = "https://pypi.tuna.tsinghua.edu.cn/simple" default = true # uv.toml [[index]] url = "https://pypi.tuna.tsinghua.edu.cn/simple" default = true # 临时指定: uv add --default-index https://pypi.tuna.tsinghua.edu.cn/simple requests
日常使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 # Python 版本管理 # 查看可用的Python版本 uv python list # 直接安装有指定解释器 uv python install 3.12 # 虚拟环境创建 uv venv --python 3.12 # 依赖锁定:生成跨平台一致的 uv.lock 文件 uv sync uv add uv run
遇到的问题 问题:uv venv 中没有 pip:python -m pip 报错:No module named pip 解决方案:官方表示这是特性而不是 bug,为了提升环境创建速度(毫秒级)、减少初始体积,鼓励使用 uv sync 而不是 pip install 1 2 3 4 5 6 7 8 9 10 11 12 13 14 uv venv --seed .venv # 会自动安装 pip、setuptools、wheel # 1. 激活虚拟环境 D:\Projects\ComfyUI\.venv\Scripts\activate # 2. 下载 get-pip.py 脚本(修复 pip 的官方工具) curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py # 3. 用虚拟环境的 Python 执行脚本安装 pip python get-pip.py # 4. 验证 pip pip --version
ruff ruff:
代码格式化、类型检查 Ruff 语法检查 (Linter) + 格式化(Formatter) 不推荐的扩展 Enhanced TOML:默认配置把我的注释都去掉了