ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

pixi add 命令完全指南:向 Workspace 添加 Conda、PyPI 与本地路径依赖

pixi add 命令完全指南:向 Workspace 添加 Conda、PyPI 与本地路径依赖 开发工具CLI包管理器任务调度【免费下载链接】pixiPowerful system-level package manager for Linux, macOS and Windows written in Rust – building on top of the Conda ecosystem.项目地址https://gitcode.com/gh_mirrors/pi/pixi点击查看免费下载pixi add是 pixi 生态中最常用的依赖管理命令负责把 conda 包、PyPI 包、Git 源码包乃至本地包以声明式的方式写入工作区清单pixi.toml或pyproject.toml并自动完成求解、锁定与安装。本文以官方 CLI 参考文档 docs/reference/cli/pixi/add.md 及其示例扩展docs/reference/cli/pixi/add_extender为主体骨架结合源码实现crates/pixi_cli/src/add.rs、crates/pixi_cli/src/cli_config.rs与集成测试系统讲解该命令的每个参数、版本选择策略、与pyproject.toml的原生集成以及背后的执行链路。读完本文你将能够熟练地用一条命令管理 conda/PyPI/Git/本地路径四种来源的依赖并理解其锁定与安装行为。命令概览与基本语法pixi add的作用是向当前工作区workspace添加依赖。它接受一个或多个依赖说明符spec每个说明符可以是conda 包名或 MatchSpec如python3.9、pytorch1.8PyPI 依赖说明配合--pypi使用遵循 PEP 508 语法本地.conda或.tar.bz2包文件的绝对路径本地源码包目录、recipe.yaml/recipe.yml/package.xml文件配合--path使用。pixi add [OPTIONS] SPEC...其中SPEC是必填位置参数可以重复提供多次实现一次性添加多个依赖。当没有提供任何 spec 时命令会直接打印帮助信息源码中通过arg_required_else_help true实现见 crates/pixi_cli/src/add.rs。基本用法pixi add numpy # 添加 numpy自动选择求解环境中可用的最新版本 pixi add python pytest # 一次添加多个包它们会被一起求解 pixi add numpy1.22,1.24 # 带版本约束如果未指定具体版本pixi 会自动选择与工作区兼容的最新版本或使用*作为通配pixi add python3.9选择满足3.9.*的最新 minor 版本即 3.9.0、3.9.1、3.9.2……中的最新一个pixi add python无版本约束时直接选最新版。核心选项定位依赖的“落点”pixi add的依赖默认写入默认 feature 的[dependencies]表但通过以下选项可以精确控制依赖写入的位置与类型。--pypi添加 PyPI 依赖--pypi将依赖声明为 PyPI 依赖写入pypi-dependencies并且不能与 conda 依赖混用同时与--host、--build互斥见 crates/pixi_cli/src/cli_config.rs 中conflicts_with_all [host, build]的定义pixi add --pypi boto3 pixi add --pypi boto3version pixi add --pypi requests[security] # 带 extra pixi add --pypi Django5.1rc1 # 预发布版本--platform (-p) PLATFORM按平台添加--platform指定依赖只针对某个平台生效必须是工作区中已定义的平台名称可以重复指定多次pixi add python --platform linux-64 --platform osx-arm64 pixi add --platform osx-64 clang上例将为linux-64与osx-arm64两个平台分别添加最新版 pythonclang则只添加到osx-64平台。平台限定会写入[target.platform.dependencies]之类的平台目标表。--platform与--build/--host可以混用。--feature (-f) FEATURE按 feature 添加默认值为default。指定 feature 后依赖写入对应 feature 的依赖表pixi add numpy --feature featurex pixi add --pypi boltons24.0.0 --feature lint--environment (-e) ENVIRONMENT按环境添加可自动创建--environment把依赖写入环境内联定义的内容中如果该环境不存在则会自动创建pixi add --environment dev numpy从源码看crates/pixi_cli/src/cli_config.rs--environment与--feature、--host、--build互斥且当传入--environment时内部会把该环境合成一个同名 feature 再写入清单见feature_name()与feature_from_flags的实现crates/pixi_cli/src/cli_config.rs。--path PATH与--editable本地路径依赖--path用于添加本地路径依赖路径从当前目录解析并相对工作区清单存储因此绝对输入路径不会变成机器相关的清单数据这是可移植性的关键设计pixi add mylib --path ../mylib pixi add mylib --path /absolute/path/to/mylib pixi add recipe-package --path ../recipe/recipe.yaml pixi add --pypi mylib --path ../mylib pixi add --pypi mylib --path ../mylib --editable关键行为与限制见 crates/pixi_cli/src/add.rs 与resolve_dependency_path实现crates/pixi_cli/src/add.rs--path与--git互斥且一次只能搭配一个包名--path requires exactly one package name路径指向目录时conda 场景要求目录内含pixi.toml或pyproject.tomlPyPI 场景要求目录内含pyproject.toml路径指向文件时conda 场景支持pixi.toml、pyproject.toml、recipe.yaml、recipe.yml、package.xmlPyPI 场景仅支持pyproject.tomlconda 路径依赖源码包需要启用pixi-buildpreview 功能。若未启用pixi 会交互式询问是否开启或在非交互终端提示运行pixi workspace preview add pixi-build见ensure_pixi_build_preview_enabledcrates/pixi_cli/src/add.rs路径最终通过pathdiff::diff_paths转换为相对工作区清单的路径后写入清单。--editable表示以可编辑editable模式安装 PyPI 依赖仅当同时使用--pypi时有效requires pypicrates/pixi_cli/src/add.rs。--index INDEX指定 PyPI 索引--index为本次添加的 PyPI 依赖指定索引 URL仅适用于 PyPI 依赖且与--git、--path互斥。从实现看map_pypi_requirements_with_indexcrates/pixi_cli/src/add.rs该索引只会应用到 source 为 Registry普通索引源的依赖上对于 Git、Path 等非 Registry 来源的依赖索引不会生效。Git 依赖选项从仓库直接添加源码包pixi add支持直接以 Git 仓库作为依赖来源结合以下选项统一定义在GitRev与DependencyConfig中见 crates/pixi_cli/src/cli_config.rs选项说明--git (-g) GITGit 仓库 URL添加 git 依赖时的必选基础参数--branch BRANCH指定分支与--tag、--rev互斥--tag TAG指定标签与--branch、--rev互斥--rev REV指定提交 revision与--branch、--tag互斥--subdirectory SUBDIRECTORY使用仓库内的子目录作为包源码根目录旧别名--subdir已弃用示例pixi add --git https://github.com/wolfv/pixi-build-examples boost-check pixi add --git https://github.com/wolfv/pixi-build-examples --branch main --subdirectory boost-check boost-check pixi add --git https://github.com/wolfv/pixi-build-examples --tag v0.1.0 boost-check pixi add --git https://github.com/wolfv/pixi-build-examples --rev e50d4a1 boost-check当 Git 依赖与--pypi组合时pixi 会把参数构造成 PEP 508 的 VCS 直接引用语法build_vcs_requirementcrates/pixi_cli/src/cli_config.rs格式为name giturlrev?rev_typetype#subdirectorysubdir其中rev_type用于区分 branch/tag/rev 三种引用类型普通 PEP 508 语法会丢失这一信息pixi add --git https://github.com/mahmoud/boltons.git boltons --pypi pixi add --git https://github.com/mahmoud/boltons.git boltons --branch main --pypi pixi add --git https://github.com/mahmoud/boltons.git boltons --rev e50d4a1 --pypi pixi add --git https://github.com/mahmoud/boltons.git boltons --tag v0.1.0 --pypi pixi add --git https://github.com/mahmoud/boltons.git boltons --tag v0.1.0 --pypi --subdirectory boltons更新与安装行为--no-install/--frozen/--lockedpixi add默认会更新清单、更新锁文件并安装环境以下三个选项用于控制这一流程见 crates/pixi_cli/src/cli_config.rs选项行为环境变量--no-install只修改清单与锁文件不修改环境不安装PIXI_NO_INSTALL--frozen按锁文件安装环境若锁文件与清单不一致则不更新锁文件PIXI_FROZEN--locked安装前检查锁文件是否最新与清单不一致则中止PIXI_LOCKEDpixi add --no-install numpy # 写入清单和锁文件但不安装 pixi add --no-lockfile-update numpy # 已弃用请改用 --frozen / --no-install源码层面LockFileUpdateConfig明确拒绝了已弃用的--no-lockfile-update标志并提示改用--frozen与--no-installcrates/pixi_cli/src/cli_config.rs。此外--no-install与--frozen的组合有一个便捷简写--as-is等价于两者同时生效它会把锁文件使用策略置为Frozen并禁止安装。配置类选项网络、认证、链接与 TLSpixi add继承了 pixi 全局配置选项用于控制求解与安装的底层行为--auth-file AUTH_FILE认证令牌文件的路径--concurrent-downloads CONCURRENT_DOWNLOADS最大并发网络请求数默认50--concurrent-solves CONCURRENT_SOLVES最大并发求解数默认等于 CPU 核数--pypi-keyring-provider PYPI_KEYRING_PROVIDER是否使用系统 keyring 查找 PyPI 凭据可选disabled、subprocess--run-post-link-scripts运行 post-link 脚本不安全慎用--no-symbolic-links安装时禁止符号链接环境变量PIXI_NO_SYMBOLIC_LINKS--no-hard-links安装时禁止硬链接环境变量PIXI_NO_HARD_LINKS--no-ref-links安装时禁止 ref links写时复制环境变量PIXI_NO_REF_LINKS--tls-no-verify不校验服务器 TLS 证书--offlineOFFLINE完全离线运行仅使用缓存数据缓存缺失即报错。可通过--offlinefalse覆盖配置文件中的offline设置。接受的值包括y、yes、t、true、on、1、n、no、f、false、off、0环境变量PIXI_OFFLINE--tls-root-certs TLS_ROOT_CERTS选择 TLS 根证书来源webpki内置 Mozilla 根证书或system系统证书库环境变量PIXI_TLS_ROOT_CERTS--use-environment-activation-cache使用环境激活缓存实验性--no-config不读取系统级与用户级配置文件但项目级project/.pixi/config.toml仍会加载环境变量PIXI_NO_CONFIG默认false--config-file PATH从指定文件加载配置替代系统级与用户级路径的搜索项目级project/.pixi/config.toml仍会叠加在其上环境变量PIXI_CONFIG_FILE。其中--offline相关行为在集成测试中有覆盖例如pixi add --offline会基于缓存版本记录约束、而求解失败时不会写入新版本见 tests/integration_python/test_offline_commands.py。全局选项定位目标工作区pixi add还支持三个全局工作区定位选项定义于ScriptWorkspaceConfig与WorkspaceConfig见 crates/pixi_cli/src/cli_config.rs选项说明--manifest-path (-m) MANIFEST_PATH指向pixi.toml、pyproject.toml或工作区目录的路径--workspace (-w) WORKSPACE工作区名称与--manifest-path互斥--script (-s) SCRIPT指向内嵌清单的脚本含 PEP 723 元数据的 Python 脚本或含/// conda-script块的任意语言文件pixi add --manifest-path ~/myworkspace/pixi.toml numpy注意--script场景下依赖写入脚本内嵌清单的隐式默认运行环境中因此不支持--feature、--environment、--host、--build见validate_script_optionscrates/pixi_cli/src/add.rs。另外若脚本尚无相邻的锁文件pixi add会以 DryRun仅求解、不落盘方式处理add_lock_file_usagecrates/pixi_cli/src/add.rs。版本选择与 Pinning 策略pixi add自动为依赖选择版本并写入清单采用基于 semver 的 pinning 策略也可通过配置覆盖默认策略semver把依赖固定到最新大版本对v0版本则固定到 minor 版本可选策略semver、minor、major、latest-up、exact-version、no-pin。通过 pixi 配置修改全局 pinning 策略pixi config set pinning-strategy no-pin --global配置项说明详见 docs/reference/pixi_configuration.md。例外规则有一批不遵循 semver 版本规范的包默认改用minor策略它们是Python、Rust、Julia、GCC、GXX、GFortran、NodeJS、Deno、R、R-Base、Perl。例如pixi add python会固定到3.11.x之类的 minor 版本线而不是3.x大版本线以避免这类工具的大版本升级破坏环境。实战示例大全以下是官方示例扩展docs/reference/cli/pixi/add_extender中的完整用例覆盖 conda、PyPI、Git 与本地路径四种依赖来源# conda 依赖 pixi add numpy # (1) 添加求解环境可用的最新 numpy pixi add numpy pandas pytorch1.8 # (2) 多个包一起求解 pixi add numpy1.22,1.24 # (3) 带版本约束 pixi add --manifest-path ~/myworkspace/pixi.toml numpy # (4) 操作指定清单 pixi add --host python3.9.0 # (5) 作为 host 依赖当前与 run 行为一致 pixi add --build cmake # (6) 作为 build 依赖当前与 run 行为一致 pixi add --platform osx-64 clang # (7) 仅对 osx-64 平台添加 pixi add --no-install numpy # (8) 只改清单和锁文件不安装 pixi add --no-lockfile-update numpy # (9) 只改清单不更新锁文件已弃用 pixi add --feature featurex numpy # (10) 添加到 featurex feature pixi add --environment dev numpy # (28) 添加到 dev 环境的内联依赖不存在则创建 pixi add /absolute/path/to/package-1.0-hb0f4dca_0.conda # (11) 直接安装本地预编译 .conda/.tar.bz2 包 # Git 源码依赖conda 场景 pixi add --git https://github.com/wolfv/pixi-build-examples boost-check # (12) pixi add --git https://github.com/wolfv/pixi-build-examples --branch main --subdirectory boost-check boost-check # (13) pixi add --git https://github.com/wolfv/pixi-build-examples --tag v0.1.0 boost-check # (14) pixi add --git https://github.com/wolfv/pixi-build-examples --rev e50d4a1 boost-check # (15) # PyPI 依赖 pixi add --pypi requests[security] # (16) 带 extra pixi add --pypi Django5.1rc1 # (17) 预发布版本 pixi add --pypi boltons24.0.0 --feature lint # (18) 写入 lint feature pixi add --pypi boltons https://files.pythonhosted.org/.../boltons-24.0.0-py3-none-any.whl # (19) 直接引用 wheel URL pixi add --pypi exchangelib githttps://github.com/ecederstrand/exchangelib # (20) Git URL 作为 PyPI 依赖 pixi add --pypi project file:///absolute/path/to/project # (21) file URL pixi add --pypi projectfile:///absolute/path/to/project --editable # (22) 可编辑安装 # Git PyPI 组合 pixi add --git https://github.com/mahmoud/boltons.git boltons --pypi # (23) pixi add --git https://github.com/mahmoud/boltons.git boltons --branch main --pypi # (24) pixi add --git https://github.com/mahmoud/boltons.git boltons --rev e50d4a1 --pypi # (25) pixi add --git https://github.com/mahmoud/boltons.git boltons --tag v0.1.0 --pypi # (26) pixi add --git https://github.com/mahmoud/boltons.git boltons --tag v0.1.0 --pypi --subdirectory boltons # (27) # 本地路径依赖 pixi add my-package --path ../my-package # (29) 本地 pixi-build 包目录需 pixi-build preview pixi add my-package --path /absolute/path/to/my-package # (30) 绝对路径存储时转为相对清单路径 pixi add recipe-package --path ../recipe/recipe.yaml # (31) 直接指向 recipe.yamlrecipe.yml/package.xml 亦可 pixi add --pypi python-package --path ../python-package # (32) Python 项目目录须含 pyproject.toml pixi add --pypi python-package --path ../python-package --editable # (33) 可编辑安装补充说明用例 (5)(6)--host与--build目前与默认的 run 依赖行为没有差异但依赖会分别写入[host-dependencies]/[build-dependencies]表用例 (11)本地.conda/.tar.bz2包名从归档文件名中解析无需指定版本用例 (29)-(31)conda 场景的本地路径依赖属于源码包需要先启用pixi-buildpreview交互式确认或pixi workspace preview add pixi-build用例 (32)-(33)PyPI 路径依赖要求目标目录包含pyproject.toml。指定构建字符串或硬件相关包需要精确指定 build string 时支持两种等价语法详见 docs/concepts/package_specifications.md# 等号语法紧凑 pixi add pytorch**cuda* pixi add numpy*py311* # 括号语法显式 pixi add pytorch [build*cuda*] pixi add numpy [buildpy311*]与 pyproject.toml 的原生集成当工作区清单是pyproject.toml时添加 PyPI 依赖会写入原生的 pyproject 结构而非 pixi 私有表pixi add --pypi boto3→ 写入project.dependencies数组pixi add --pypi boto3 --feature aws→ 写入原生dependency-groups.aws数组pixi add --pypi --editable boto3 file://absolute/path/to/boto3→ 本地可编辑依赖写入pypi-dependencies数组。需要特别注意的是一旦指定了--platform或--editable依赖会改写到tool.pixi.pypi-dependencies表因为原生数组不支持平台限定或可编辑依赖。无论写入哪个位置pixi 都会像读取pypi-dependencies表默认 feature 或指定 feature一样消费这些依赖。底层执行链路与提示信息pixi add的执行入口在 crates/pixi_cli/src/add.rs 的execute函数L408-L627核心流程为校验--script相关限制不支持--feature/--environment/--host/--build通过WorkspaceLocator::for_cli()定位工作区支持--manifest-path/--workspace/--script三种定位方式若指定--path调用resolve_dependency_path校验并规范化路径conda 源码路径依赖还会检查pixi-buildpreview 是否启用按DependencyType分发conda 走add_conda_depsPyPI 走add_pypi_deps二者定义于 crates/pixi_api/src/context.rs实际实现在crates/pixi_api/src/workspace/add/模块依赖选项统一封装为DependencyOptions与GitOptionscrates/pixi_api/src/workspace/add/options.rs输出结果成功添加的包打印✔ Added pkg并注明隐式约束如 semver pin已存在的依赖走“already a dependency”分支。两个值得了解的运行时提示均可在 crates/pixi_cli/src/add.rs 源码中看到依赖已存在时输出✔ name is already a dependency并提示用pixi upgrade name获取最新兼容版本若该包继承自[workspace.dependencies]则提示更新工作区依赖表或用显式 spec如pixi add name1.0覆盖继承。feature 未被任何环境使用添加的依赖不会被求解与 pinpixi 会警告并提示先用pixi workspace environment add environment --feature feature把 feature 挂到环境上再运行pixi upgrade --feature feature names完成解析与固定。总结pixi add是 pixi 工作区依赖管理的统一入口一条命令同时覆盖 conda MatchSpec、PyPI PEP 508 依赖、Git 源码包与本地路径包四种来源通过--platform/--feature/--environment精确控制依赖落点通过--no-install/--frozen/--locked控制锁文件与安装行为在与pyproject.toml协作时还能直接写入原生project.dependencies与dependency-groups。理解其 semver pinning 策略以及对 Python、Rust、Julia 等非 semver 包自动降级到 minor 策略与路径相对化存储逻辑能帮助你在多平台、多 feature 的复杂工作区中稳定地管理依赖。赞分享开发工具CLI包管理器任务调度【免费下载链接】pixiPowerful system-level package manager for Linux, macOS and Windows written in Rust – building on top of the Conda ecosystem.项目地址https://gitcode.com/gh_mirrors/pi/pixi点击查看免费下载相关推荐Cargo add 命令完全指南向 Cargo.toml 精准添加与更新依赖Cargo add 命令完全指南向 Cargo.toml 精准添加与更新依赖 cargo add 是 Cargo 自带的依赖管理命令它替代了手工编辑 Car开发工具包管理器CLI构建工具pixi remove 命令详解从工作区中移除 Conda 与 PyPI 依赖的完整指南pixi remove 命令详解从工作区中移除 Conda 与 PyPI 依赖的完整指南 pixi remove 是 pixi 包管理器基于 Rust 编写开发工具CLI包管理器任务调度如何高效管理Python依赖Rye add/remove命令完全指南如何高效管理Python依赖Rye add/remove命令完全指南 Rye是一款为Python开发者提供无忧体验的工具它简化了依赖管理流程让开发者能够更开发工具CLI上一篇终极指南如何使用Detect And Track实现视频中高效姿态估计下一篇为什么选择CSS Beautify10个让你爱不释手的理由创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表