统一Conda和Pip需求管理。
项目描述
:rocket: conda-join
- 统一Conda和Pip需求管理 :rocket
conda-join
通过允许使用单个requirements.yaml
文件来处理Conda和Pip依赖项,简化了Python项目依赖项管理。这种简化的方法允许创建统一的Conda environment.yaml
文件,同时还可以无缝地集成到setup.py
或pyproject.toml
中。此外,它还可以用作CLI,将多个requirements.yaml
文件合并到一个environment.yaml
文件中。使用conda-join
简化您的设置,并将所有依赖项维护在一个地方。
:books: 目录
:package: 安装
要安装conda-join
,请运行以下命令
pip install -U conda-join
或者只需将脚本复制到您的计算机上
wget https://raw.githubusercontent.com/basnijholt/conda-join/main/conda_join.py
:page_facing_up: requirements.yaml
结构
conda-join
使用特定格式的requirements.yaml
文件进行处理
- 名称(可选):用于文档,输出中不使用。
- 渠道:包的来源列表,例如
conda-forge
。 - 依赖关系:Conda和Pip包的混合。
示例
一个requirements.yaml
文件的示例
name: example_environment
channels:
- conda-forge
dependencies:
- numpy # same name on conda and pip
- conda: python-graphviz # When names differ between Conda and Pip
pip: graphviz
- pip: slurm-usage # pip-only
- conda: mumps # conda-only
⚠️ conda-join
可以在pyproject.toml
或setup.py
中处理此文件,并创建一个environment.yaml
文件。
重点
- 标准名称(例如,
- numpy
)假定在Conda和Pip中相同。 - 使用
conda: <package>
和pip: <package>
来指定跨平台的不同名称。 - 使用
pip:
来指定仅通过Pip可用的包。 - 使用
conda:
来指定仅通过Conda可用的包。
使用CLI conda-join
将结合这些依赖项到一个environment.yaml
文件中,结构如下:
name: some_name
channels:
- conda-forge
dependencies:
- numpy
- python-graphviz
- mumps
pip:
- slurm-usage
平台选择器
本工具支持一系列平台选择器,允许根据用户的操作系统和架构对依赖项进行特定处理。此功能特别适用于管理不同环境中的条件依赖项。
支持的选择器
以下选择器受支持:
linux
:适用于所有基于Linux的系统。linux64
:专门适用于64位Linux系统。aarch64
:适用于基于ARM64架构的Linux系统。ppc64le
:适用于PowerPC 64位Little Endian架构的Linux系统。osx
:适用于所有macOS系统。osx64
:专门适用于64位macOS系统。arm64
:适用于基于ARM64架构的macOS系统(苹果硅)。macos
:是osx
的替代方案,用于macOS系统。unix
:适用于所有类UNIX系统(包括Linux和macOS)。win
:适用于所有Windows系统。win64
:专门适用于64位Windows系统。
使用方法
选择器用于requirements.yaml
文件,根据平台条件性地包含依赖项
dependencies:
- some-package # [unix]
- another-package # [win]
- special-package # [osx64]
- pip: cirq # [macos]
conda: cirq # [linux]
在此示例中
some-package
仅在类UNIX环境中(Linux和macOS)包含。another-package
专门针对Windows。special-package
仅在64位macOS系统中包含。cirq
在macOS上由pip
管理,在Linux上由conda
管理。这展示了您可以根据平台指定不同的包管理器来管理同一软件包。
实现
工具解析这些选择器,并根据其运行的平台过滤依赖项。这对于创建可跨不同平台移植的环境文件特别有用,确保每个环境都安装了适当的依赖项。
:memo: 使用方法
使用pyproject.toml
或setup.py
要在您的项目中使用conda-join
,您可以在pyproject.toml
中进行配置。此设置与位于同一目录中的requirements.yaml
文件协同工作。行为取决于您的项目设置
- 仅使用
pyproject.toml
时:将自动根据requirements.yaml
的内容填充pyproject.toml
中的dependencies
字段。 - 使用
setup.py
时:将自动填充setup.py
中的install_requires
字段,反映在requirements.yaml
中定义的依赖项。
以下是一个pyproject.toml
配置示例
[build-system]
build-backend = "setuptools.build_meta"
requires = ["setuptools", "wheel", "conda-join"]
[project]
dynamic = ["dependencies"]
在此配置中,conda-join
作为构建需求包含在内,允许它处理requirements.yaml
文件中的Python依赖项,并相应地更新项目的依赖项。
:memo: 作为CLI
使用conda-join
扫描目录以查找requirements.yaml
文件,并将它们合并为environment.yaml
文件。有关更多信息,请参阅示例或检查conda-join -h
的输出
usage: conda-join [-h] [-d DIRECTORY] [-o OUTPUT] [-n NAME] [--depth DEPTH]
[--stdout] [-v]
Unified Conda and Pip requirements management.
options:
-h, --help show this help message and exit
-d DIRECTORY, --directory DIRECTORY
Base directory to scan for requirements.yaml files, by
default `.`
-o OUTPUT, --output OUTPUT
Output file for the conda environment, by default
`environment.yaml`
-n NAME, --name NAME Name of the conda environment, by default `myenv`
--depth DEPTH Depth to scan for requirements.yaml files, by default
1
--stdout Output to stdout instead of a file
-v, --verbose Print verbose output
限制
- 无冲突解决:无法解决不同
requirements.yaml
文件之间的版本冲突。 - 以conda为中心:最适合conda环境。
今天就尝试使用conda-join
来简化跨多个项目管理Conda环境依赖项的方法!🎉👏
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装软件包的信息。