conda / conda-build

Commands and tools for building conda packages
https://docs.conda.io/projects/conda-build/
Other
381 stars 423 forks source link

Run requirements are not encoded correctly for X.postN versions #2846

Closed stuarteberg closed 6 years ago

stuarteberg commented 6 years ago

When I specify an exact version requirement in run:, conda-build seems to get confused about how to encode that requirement into a range of compatible versions, IF the version involves .post<N> (which is permitted according to PEP 440).

Actual Behavior

Here's a recipe for foo that has post in its version:

package:
  name: foo
  version: 0.1.post10

When I attempt to use that as a requirement in bar, the run requirement is transformed to something bogus (foo[version='>=0.1.0inf.10,<0.1.0inf.11.0a0']):

package:
  name: bar
  version: 0.1

requirements:
  run:
    - foo 0.1.post10

test:
  commands:
    - true
$ conda build bar
...
conda_build.exceptions.DependencyNeedsBuildingError: Unsatisfiable dependencies for platform osx-64:
{"foo[version='>=0.1.0inf.10,<0.1.0inf.11.0a0']", 'bar==0.1=0'}
``` $ conda build bar Adding in variants from internal_defaults INFO:conda_build.variants:Adding in variants from internal_defaults Attempting to finalize metadata for bar INFO:conda_build.metadata:Attempting to finalize metadata for bar Adding .* to spec 'foo 0.1.post10' to ensure satisfiability. Please consider putting {{ var_name }}.* or some relational operator (>/=/<=) on this spec in meta.yaml, or if req is also a build req, using {{ pin_compatible() }} jinja2 function instead. See https://conda.io/docs/user-guide/tasks/build-packages/variants.html#pinning-at-the-variant-level WARNING:conda_build.utils:Adding .* to spec 'foo 0.1.post10' to ensure satisfiability. Please consider putting {{ var_name }}.* or some relational operator (>/=/<=) on this spec in meta.yaml, or if req is also a build req, using {{ pin_compatible() }} jinja2 function instead. See https://conda.io/docs/user-guide/tasks/build-packages/variants.html#pinning-at-the-variant-level BUILD START: ['bar-0.1-0.tar.bz2'] Solving environment: ...working... done source tree in: /miniforge/conda-bld/bar_1524764552864/work Packaging bar INFO:conda_build.build:Packaging bar Packaging bar-0.1-0 INFO:conda_build.build:Packaging bar-0.1-0 No files or script found for output bar WARNING:conda_build.build:No files or script found for output bar number of files: 0 Fixing permissions updating: bar-0.1-0.tar.bz2 TEST START: /miniforge/conda-bld/osx-64/bar-0.1-0.tar.bz2 Updating index at /miniforge/conda-bld/linux-64 to make package installable with dependencies INFO:conda_build.build:Updating index at /miniforge/conda-bld/linux-64 to make package installable with dependencies Updating index at /miniforge/conda-bld/linux-aarch64 to make package installable with dependencies INFO:conda_build.build:Updating index at /miniforge/conda-bld/linux-aarch64 to make package installable with dependencies Updating index at /miniforge/conda-bld/linux-cos5-64 to make package installable with dependencies INFO:conda_build.build:Updating index at /miniforge/conda-bld/linux-cos5-64 to make package installable with dependencies Updating index at /miniforge/conda-bld/osx-64 to make package installable with dependencies INFO:conda_build.build:Updating index at /miniforge/conda-bld/osx-64 to make package installable with dependencies Updating index at /miniforge/conda-bld/noarch to make package installable with dependencies INFO:conda_build.build:Updating index at /miniforge/conda-bld/noarch to make package installable with dependencies Adding in variants from /var/folders/w5/bd542jpd7cq7hy75d9nxf5ndhndmmh/T/tmpxrzseyq2/info/recipe/conda_build_config.yaml INFO:conda_build.variants:Adding in variants from /var/folders/w5/bd542jpd7cq7hy75d9nxf5ndhndmmh/T/tmpxrzseyq2/info/recipe/conda_build_config.yaml Renaming work directory, /miniforge/conda-bld/bar_1524764552864/work to /miniforge/conda-bld/bar_1524764552864/work_moved_bar-0.1-0_osx-64 Solving environment: ...working... failed Traceback (most recent call last): File "/miniforge/lib/python3.6/site-packages/conda_build/environ.py", line 706, in get_install_actions actions = install_actions(prefix, index, specs, force=True) File "/miniforge/lib/python3.6/site-packages/conda/common/io.py", line 46, in decorated return f(*args, **kwds) File "/miniforge/lib/python3.6/site-packages/conda/plan.py", line 541, in install_actions txn = solver.solve_for_transaction(prune=prune, ignore_pinned=not pinned) File "/miniforge/lib/python3.6/site-packages/conda/core/solve.py", line 505, in solve_for_transaction force_remove, force_reinstall) File "/miniforge/lib/python3.6/site-packages/conda/core/solve.py", line 438, in solve_for_diff final_precs = self.solve_final_state(deps_modifier, prune, ignore_pinned, force_remove) File "/miniforge/lib/python3.6/site-packages/conda/core/solve.py", line 318, in solve_final_state conflicting_specs = r.get_conflicting_specs(tuple(final_environment_specs)) File "/miniforge/lib/python3.6/site-packages/conda/resolve.py", line 705, in get_conflicting_specs reduced_index = self.get_reduced_index(specs) File "/miniforge/lib/python3.6/site-packages/conda/resolve.py", line 254, in get_reduced_index specs, features = self.verify_specs(specs) File "/miniforge/lib/python3.6/site-packages/conda/resolve.py", line 172, in verify_specs raise ResolvePackageNotFound(bad_deps) conda.exceptions.ResolvePackageNotFound: - bar==0.1=0 - foo[version='>=0.1.0inf.10,<0.1.0inf.11.0a0'] - foo[version='>=0.1.0inf.10,<0.1.0inf.11.0a0'] During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/miniforge/bin/conda-build", line 6, in sys.exit(conda_build.cli.main_build.main()) File "/miniforge/lib/python3.6/site-packages/conda_build/cli/main_build.py", line 420, in main execute(sys.argv[1:]) File "/miniforge/lib/python3.6/site-packages/conda_build/cli/main_build.py", line 411, in execute verify=args.verify) File "/miniforge/lib/python3.6/site-packages/conda_build/api.py", line 199, in build notest=notest, need_source_download=need_source_download, variants=variants) File "/miniforge/lib/python3.6/site-packages/conda_build/build.py", line 2123, in build_tree test(pkg, config=metadata.config, stats=stats) File "/miniforge/lib/python3.6/site-packages/conda_build/build.py", line 1878, in test channel_urls=tuple(metadata.config.channel_urls)) File "/miniforge/lib/python3.6/site-packages/conda_build/environ.py", line 708, in get_install_actions raise DependencyNeedsBuildingError(exc, subdir=subdir) conda_build.exceptions.DependencyNeedsBuildingError: Unsatisfiable dependencies for platform osx-64: {"foo[version='>=0.1.0inf.10,<0.1.0inf.11.0a0']", 'bar==0.1=0'} ```

Expected Behavior

I expected the run dependency to be encoded as foo==0.1.post10 or maybe something like foo[version='>=0.1.post10,<0.1.0post11.0a0']. I don't know where the inf part is coming from.

Click for `conda info` details ``` $ conda info active environment : base active env location : /miniforge shell level : 1 user config file : /Users/bergs/.condarc populated config files : /miniforge/.condarc conda version : 4.5.1 conda-build version : 3.9.1 python version : 3.6.2.final.0 base environment : /miniforge (writable) channel URLs : https://conda.anaconda.org/flyem-forge/osx-64 https://conda.anaconda.org/flyem-forge/noarch https://conda.anaconda.org/conda-forge/osx-64 https://conda.anaconda.org/conda-forge/noarch https://repo.anaconda.com/pkgs/main/osx-64 https://repo.anaconda.com/pkgs/main/noarch https://repo.anaconda.com/pkgs/free/osx-64 https://repo.anaconda.com/pkgs/free/noarch https://repo.anaconda.com/pkgs/r/osx-64 https://repo.anaconda.com/pkgs/r/noarch https://repo.anaconda.com/pkgs/pro/osx-64 https://repo.anaconda.com/pkgs/pro/noarch package cache : /miniforge/pkgs /Users/bergs/.conda/pkgs envs directories : /miniforge/envs /Users/bergs/.conda/envs platform : osx-64 user-agent : conda/4.5.1 requests/2.14.2 CPython/3.6.2 Darwin/16.7.0 OSX/10.12.6 UID:GID : 1633079952:1899195968 netrc file : None offline mode : False ```
msarahan commented 6 years ago

PR would be welcome, but I think actually this won't happen after https://github.com/conda/conda-build/pull/2839 since I won't attempt to touch non-exact (i.e. has version and build string) specs.

skrah commented 6 years ago

Thanks for pointing me here: Yes, #2847 looks like a duplicate.

stuarteberg commented 6 years ago

As of conda-build 3.9.2, this issue is resolved. For the example above, the run requirements are now encoded as foo 0.1.post10.*. Thanks!

github-actions[bot] commented 2 years ago

Hi there, thank you for your contribution!

This issue has been automatically locked because it has not had recent activity after being closed.

Please open a new issue if needed.

Thanks!