Staged-recipes: `noarch` with dep(s) not built on all systems

Created on 12 Jan 2018  路  16Comments  路  Source: conda-forge/staged-recipes

What is the policy on noarch builds which have dependencies that are not built for all systems? Are these valid noarch recipes?
Attn: @scopatz
@conda-forge/staged-recipes

question

Most helpful comment

If you make a noarch package depending on a package only available on a different python version, where here stupid-dummy-dep is a noarch package depending on enum34 but trying to be installed on python 3.6:

UnsatisfiableError: The following specifications were found to be in conflict:
  - python 3.6*
  - stupid-dummy-dep -> enum34 -> ordereddict -> python 2.6*
Use "conda info <package>" to see the dependencies for each package.

If you make a noarch package with a dependency only available on a different architecture, where here stupid-dummy-maconly is a noarch package, stupid-dummy is a package only available on Mac (sorry for bad names, they should probably be swapped), and I'm trying to install it on Linux:

PackageNotFoundError: Packages missing in current channels:

  - stupid-dummy-maconly -> stupid-dummy

We have searched for the packages in the following channels:
[...]

Pretty informative error messages, IMO, which makes me 馃憤 for allowing this.

All 16 comments

It would be nice to not propagate dependency OS specific build issues up through all the dependency graph.

I think it is OK to have noarch packages whose dependencies don't exist on all platforms at the time when the recipe is built. The dependency may be added to a platform in the future, and the noarch package will work with no further human intervention.

What sort of failure does conda give if someone tries to install this noarch package with missing dependencies? Even a dummy example would be productive for understanding this behavior.

If you make a noarch package depending on a package only available on a different python version, where here stupid-dummy-dep is a noarch package depending on enum34 but trying to be installed on python 3.6:

UnsatisfiableError: The following specifications were found to be in conflict:
  - python 3.6*
  - stupid-dummy-dep -> enum34 -> ordereddict -> python 2.6*
Use "conda info <package>" to see the dependencies for each package.

If you make a noarch package with a dependency only available on a different architecture, where here stupid-dummy-maconly is a noarch package, stupid-dummy is a package only available on Mac (sorry for bad names, they should probably be swapped), and I'm trying to install it on Linux:

PackageNotFoundError: Packages missing in current channels:

  - stupid-dummy-maconly -> stupid-dummy

We have searched for the packages in the following channels:
[...]

Pretty informative error messages, IMO, which makes me 馃憤 for allowing this.

Agreed. Thanks for experimenting with this, @dougalsutherland.

Awesome! I guess this needs some docs somewhere?

probably the docs repo :)

Though an additional comment in the example would be good too.

I think we resolved this satisfactorily. Happy to close @CJ-Wright?

Yes, although I was going to keep this open until the docs got written.

Ah sorry. Missed the other doc point. Yeah feel free to keep this open if it helps you.

How would you be able to get this through the selector linting on staged-recipes? On the feedstock you can do a rerender and thus won't need a selector with missing Windows dependencies. Is it currently possible to make this use case work for new recipes on staged-recipes?
Very recent example: https://github.com/conda-forge/staged-recipes/pull/4860.

Would you have to use [skip appveyor] commit messages?
(EDIT: Nvm, found https://github.com/conda-forge/staged-recipes/pull/4724. Should the [skip appveyor] necessity also be added to the example recipe's text?)

@mbargull Right, just don't put skip: true  # [win]. [skip appveyor] in the commit message avoids running it on Windows where it won't work anyway, but if you didn't do that we would also be able to just ignore the red X. :)

we would also be able to just ignore the red X. :)

I tend to forget that "human factor" -- thanks for reminding me 馃槃.
If you think it's reasonable, I'd suggest to put a note on [skip appveyor] when the docs are added.

Closing as this is now documented thanks to PR ( https://github.com/conda-forge/conda-forge.github.io/pull/567 ).

Thanks everyone :)

Was this page helpful?
0 / 5 - 0 ratings

Related issues

jankatins picture jankatins  路  12Comments

isuruf picture isuruf  路  4Comments

jakirkham picture jakirkham  路  5Comments

notestaff picture notestaff  路  3Comments

frol picture frol  路  7Comments