You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/maintainer/knowledge_base.md
+31Lines changed: 31 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1655,6 +1655,37 @@ add some information on r packages which make heavy use of `noarch: generic`
1655
1655
- [importlib_metadata and importlib-metadata](https://github.com/conda-forge/importlib_metadata-feedstock/blob/main/recipe/meta.yaml)
1656
1656
- [typing_extensions and typing-extensions](https://github.com/conda-forge/typing_extensions-feedstock/blob/main/recipe/meta.yaml)
1657
1657
1658
+
### Common patterns
1659
+
1660
+
#### Splitting out heavy optional dependencies
1661
+
1662
+
When a package has especially large optional dependencies it can be useful to split the package into a "lite" version that depends only on the core dependencies and a "full" version that depends on the "lite" version and all optional dependencies. The `pin_subpackage` function helps to ensure that the "full" version will pull the exact version of the "lite" version. As an example consider the [seaborn recipe](https://github.com/conda-forge/seaborn-feedstock/blob/eec88f0116a26c2e205daab10193e38e96407cab/recipe/meta.yaml) with optional statsmodels dependency:
In order to prevent the "lite" version `seaborn-base` to pull in seaborn versions before the package split, `run_constrained` will ensure that the `seaborn-base` package can only be installed together with the matching version of the `seaborn` package.
1675
+
1676
+
```yaml
1677
+
- name: seaborn-base
1678
+
build:
1679
+
noarch: python
1680
+
requirements:
1681
+
run_constrained:
1682
+
- seaborn ={{ version }}=*_{{ build }}
1683
+
```
1684
+
1685
+
:::important
1686
+
Counter-intuitively `{{ pin_subpackage('seaborn-base', exact=True) }}` will only work in the requirements section but not in `run_constrained` (see [conda-build#4415](https://github.com/conda/conda-build/issues/4415)). Use `seaborn ={{ version }}=*_{{ build }}` to ensure that the `seaborn-base` package can only be installed with the matching version of the `seaborn` package.
1687
+
:::
1688
+
1658
1689
### Common pitfalls with `outputs`
1659
1690
1660
1691
This is a non-exhaustive list of common pitfalls when using `outputs`.
0 commit comments