DavHau / mach-nix

Create highly reproducible python environments
MIT License
862 stars 106 forks source link

"Pypy not available" when building conda-forge package #199

Open worldofgeese opened 3 years ago

worldofgeese commented 3 years ago

In my default.nix I have:

let mach-nix = import (builtins.fetchGit {
  url = "https://github.com/DavHau/mach-nix";
  ref = "refs/heads/conda-beta";
    }) {
      python = "python37";
    }; in
mach-nix.mkPython {
  requirements = ''
    qcfractal
    qcengine >=0.13.0
  '';
  providers = {
    qcfractal = "conda-forge";
    qcfractal-core = "conda-forge";
    python-abi = "conda-forge";
  };
}

If I invoke nix-build default.nix, I receive the following trace:

installing 'python3-3.7.9-env'
trace: using conda channels: conda-forge, main, r
building '/nix/store/6bx3pfdal3ir1jvdlxn4c1vkpwlv0zp7-mach_nix_file.drv'...

The Package 'pypy' (build: None) is not available from any of the selected providers ['conda/main', 'conda/r', 'nixpkgs', 'sdist', 'wheel']
 for the selected python version
Traceback (most recent call last):
  File "/nix/store/y8zx05a2nvpphzqmwmjamzbm0kk15111-icr12wdpsv4babiynh0r98zmcjrdpm67-source/mach_nix/generate.py", line 106, in <module>
    main()
  File "/nix/store/y8zx05a2nvpphzqmwmjamzbm0kk15111-icr12wdpsv4babiynh0r98zmcjrdpm67-source/mach_nix/generate.py", line 99, in main
    do()
  File "/nix/store/y8zx05a2nvpphzqmwmjamzbm0kk15111-icr12wdpsv4babiynh0r98zmcjrdpm67-source/mach_nix/generate.py", line 66, in do
    expr = generator.generate(reqs)
  File "/nix/store/y8zx05a2nvpphzqmwmjamzbm0kk15111-icr12wdpsv4babiynh0r98zmcjrdpm67-source/mach_nix/generators/overides_generator.py", line 36, in generate
    pkgs = self.resolver.resolve(reqs)
  File "/nix/store/y8zx05a2nvpphzqmwmjamzbm0kk15111-icr12wdpsv4babiynh0r98zmcjrdpm67-source/mach_nix/resolver/resolvelib_resolver.py", line 51, in resolve
    result = resolvelib.Resolver(Provider(self.nixpkgs, self.deps_provider), reporter).resolve(reqs, max_rounds=1000)
  File "/nix/store/jjyn1kn5bys863ckyaw2bjyp7nyq2j7c-python3-3.7.9-env/lib/python3.7/site-packages/resolvelib/resolvers.py", line 413, in resolve
    state = resolution.resolve(requirements, max_rounds=max_rounds)
  File "/nix/store/jjyn1kn5bys863ckyaw2bjyp7nyq2j7c-python3-3.7.9-env/lib/python3.7/site-packages/resolvelib/resolvers.py", line 323, in resolve
    raise ResolutionTooDeep(max_rounds)
resolvelib.resolvers.ResolutionTooDeep: 1000
builder for '/nix/store/6bx3pfdal3ir1jvdlxn4c1vkpwlv0zp7-mach_nix_file.drv' failed with exit code 1
error: build of '/nix/store/6bx3pfdal3ir1jvdlxn4c1vkpwlv0zp7-mach_nix_file.drv' failed
(use '--show-trace' to show detailed location information)
worldofgeese commented 3 years ago

When I remove the python version requirement, the package builds but the only bin results are qcengine and postgres-related binaries. The qcfractal-server binary is nowhere to be found.

DavHau commented 3 years ago

They way conda support is implemented, it uses the python interpreter from nixpkgs and therefore ignores python from conda.

I'm not sure why pypy doesn't resolve in this case. But even if it would resolve, it probably won't work, since mach-nix will still use nixpkg's python.

I'll try to debug this resolution error as soon as I find some time.

gdinh commented 2 years ago

I just ran into this error message, although the traceback did not complain about the resolution being too deep, so I'm unsure if the underlying cause is the same.

Here's a simple flake that generates the issue:

{
  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
    flake-utils.url = "github:numtide/flake-utils";

    mach-nix = {
      url = "github:DavHau/mach-nix/3.5.0";
      inputs.nixpkgs.follows = "nixpkgs";
      inputs.flake-utils.follows = "flake-utils";
      inputs.pypi-deps-db.follows = "pypi-deps-db";
    };

    pypi-deps-db = {
      url = "github:DavHau/mach-nix/3.5.0";
    };
  };

  outputs = { self, nixpkgs, flake-utils, mach-nix, pypi-deps-db }:
    flake-utils.lib.eachDefaultSystem (system:
      let

        python = "python39";

        pkgs = import nixpkgs { inherit system python; };
        mach = import mach-nix { inherit pkgs python; };

        providers = {
          _default = "wheel,sdist,nixpkgs,conda,conda-forge";
          pygmo = "conda-forge";
        };

        fullPython = mach.mkPython {
          inherit providers;
          requirements = "pygmo";
        };

      in {
        devShell = pkgs.mkShell {
          nativeBuildInputs = [ fullPython ];
        };
      });
}

The resulting error message is:

trace: using conda channels: conda-forge, main, r
error: builder for '/nix/store/brpqqqsqwyvbfrzqxd68722086iihr1j-mach_nix_file.drv' failed with exit code 1;
       last 9 log lines:
       >
       > The Package 'pypy' (build: ()) is not available from any of the selected providers ['conda/conda-forge', 'conda/main', 'conda/r', 'nixpkgs', 'sdist', 'wheel']
       >  for the selected python version
       > The required package might just not (yet) be part of the dependency DB currently used.
       > The DB can be updated by specifying 'pypiDataRev' when importing mach-nix.
       > For examples see: https://github.com/DavHau/mach-nix/blob/master/examples.md
       > If it still doesn't work, there might have been an error while building the DB.
       > Please open an issue at: https://github.com/DavHau/mach-nix/issues/new
       >
       For full logs, run 'nix log /nix/store/brpqqqsqwyvbfrzqxd68722086iihr1j-mach_nix_file.drv'.

       … while realising the context of path '/nix/store/k5sx7w86balhmf0xy8jnwryissvys31v-mach_nix_file/share/mach_nix_file.nix'

       at /nix/store/n6hsk44fw5x8kqkff2mxyd5wd6663ai5-source/mach_nix/nix/lib.nix:180:16:

          179|       file = "${compileExpression args}/share/mach_nix_file.nix";
          180|       result = import file { inherit (args) pkgs python; };
             |                ^
          181|       manylinux =

       … while evaluating the attribute 'overrides'

       at /nix/store/n6hsk44fw5x8kqkff2mxyd5wd6663ai5-source/mach_nix/nix/lib.nix:187:7:

          186|     in {
          187|       overrides = result.overrides manylinux autoPatchelfHook;
             |       ^
          188|       select_pkgs = result.select_pkgs;

       … while evaluating 'composeExtensions'

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:75:18:

           74|   composeExtensions =
           75|     f: g: final: prev:
             |                  ^
           76|       let fApplied = f final prev;

       … from call site

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:76:22:

           75|     f: g: final: prev:
           76|       let fApplied = f final prev;
             |                      ^
           77|           prev' = prev // fApplied;

       … while evaluating 'composeExtensions'

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:75:18:

           74|   composeExtensions =
           75|     f: g: final: prev:
             |                  ^
           76|       let fApplied = f final prev;

       … from call site

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:76:22:

           75|     f: g: final: prev:
           76|       let fApplied = f final prev;
             |                      ^
           77|           prev' = prev // fApplied;

       … while evaluating 'composeExtensions'

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:75:18:

           74|   composeExtensions =
           75|     f: g: final: prev:
             |                  ^
           76|       let fApplied = f final prev;

       … from call site

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:76:22:

           75|     f: g: final: prev:
           76|       let fApplied = f final prev;
             |                      ^
           77|           prev' = prev // fApplied;

       … while evaluating 'composeExtensions'

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:75:18:

           74|   composeExtensions =
           75|     f: g: final: prev:
             |                  ^
           76|       let fApplied = f final prev;

       … from call site

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:76:22:

           75|     f: g: final: prev:
           76|       let fApplied = f final prev;
             |                      ^
           77|           prev' = prev // fApplied;

       … while evaluating 'composeExtensions'

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:75:18:

           74|   composeExtensions =
           75|     f: g: final: prev:
             |                  ^
           76|       let fApplied = f final prev;

       … from call site

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:76:22:

           75|     f: g: final: prev:
           76|       let fApplied = f final prev;
             |                      ^
           77|           prev' = prev // fApplied;

       … while evaluating 'composeExtensions'

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:75:18:

           74|   composeExtensions =
           75|     f: g: final: prev:
             |                  ^
           76|       let fApplied = f final prev;

       … from call site

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:76:22:

           75|     f: g: final: prev:
           76|       let fApplied = f final prev;
             |                      ^
           77|           prev' = prev // fApplied;

       … while evaluating 'composeExtensions'

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:75:18:

           74|   composeExtensions =
           75|     f: g: final: prev:
             |                  ^
           76|       let fApplied = f final prev;

       … from call site

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:76:22:

           75|     f: g: final: prev:
           76|       let fApplied = f final prev;
             |                      ^
           77|           prev' = prev // fApplied;

       … while evaluating 'composeExtensions'

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:75:18:

           74|   composeExtensions =
           75|     f: g: final: prev:
             |                  ^
           76|       let fApplied = f final prev;

       … from call site

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:76:22:

           75|     f: g: final: prev:
           76|       let fApplied = f final prev;
             |                      ^
           77|           prev' = prev // fApplied;

       … while evaluating 'composeExtensions'

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:75:18:

           74|   composeExtensions =
           75|     f: g: final: prev:
             |                  ^
           76|       let fApplied = f final prev;

       … from call site

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:76:22:

           75|     f: g: final: prev:
           76|       let fApplied = f final prev;
             |                      ^
           77|           prev' = prev // fApplied;

       … while evaluating 'composeExtensions'

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:75:18:

           74|   composeExtensions =
           75|     f: g: final: prev:
             |                  ^
           76|       let fApplied = f final prev;

       … from call site

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:76:22:

           75|     f: g: final: prev:
           76|       let fApplied = f final prev;
             |                      ^
           77|           prev' = prev // fApplied;

       … while evaluating 'composeExtensions'

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:75:18:

           74|   composeExtensions =
           75|     f: g: final: prev:
             |                  ^
           76|       let fApplied = f final prev;

       … from call site

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:76:22:

           75|     f: g: final: prev:
           76|       let fApplied = f final prev;
             |                      ^
           77|           prev' = prev // fApplied;

       … while evaluating 'composeExtensions'

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:75:18:

           74|   composeExtensions =
           75|     f: g: final: prev:
             |                  ^
           76|       let fApplied = f final prev;

       … from call site

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:76:22:

           75|     f: g: final: prev:
           76|       let fApplied = f final prev;
             |                      ^
           77|           prev' = prev // fApplied;

       … while evaluating 'composeExtensions'

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:75:18:

           74|   composeExtensions =
           75|     f: g: final: prev:
             |                  ^
           76|       let fApplied = f final prev;

       … from call site

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:76:22:

           75|     f: g: final: prev:
           76|       let fApplied = f final prev;
             |                      ^
           77|           prev' = prev // fApplied;

       … while evaluating 'composeExtensions'

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:75:18:

           74|   composeExtensions =
           75|     f: g: final: prev:
             |                  ^
           76|       let fApplied = f final prev;

       … from call site

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:76:22:

           75|     f: g: final: prev:
           76|       let fApplied = f final prev;
             |                      ^
           77|           prev' = prev // fApplied;

       … while evaluating 'composeExtensions'

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:75:18:

           74|   composeExtensions =
           75|     f: g: final: prev:
             |                  ^
           76|       let fApplied = f final prev;

       … from call site

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:76:22:

           75|     f: g: final: prev:
           76|       let fApplied = f final prev;
             |                      ^
           77|           prev' = prev // fApplied;

       … while evaluating 'composeExtensions'

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:75:18:

           74|   composeExtensions =
           75|     f: g: final: prev:
             |                  ^
           76|       let fApplied = f final prev;

       … from call site

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:76:22:

           75|     f: g: final: prev:
           76|       let fApplied = f final prev;
             |                      ^
           77|           prev' = prev // fApplied;

       … while evaluating 'composeExtensions'

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:75:18:

           74|   composeExtensions =
           75|     f: g: final: prev:
             |                  ^
           76|       let fApplied = f final prev;

       … from call site

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:78:22:

           77|           prev' = prev // fApplied;
           78|       in fApplied // g final prev';
             |                      ^
           79|

       … while evaluating 'composeExtensions'

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:75:18:

           74|   composeExtensions =
           75|     f: g: final: prev:
             |                  ^
           76|       let fApplied = f final prev;

       … from call site

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:69:67:

           68|   #
           69|   extends = f: rattrs: self: let super = rattrs self; in super // f self super;
             |                                                                   ^
           70|

       … while evaluating 'extends'

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/fixed-points.nix:69:24:

           68|   #
           69|   extends = f: rattrs: self: let super = rattrs self; in super // f self super;
             |                        ^
           70|

       … from call site

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/customisation.nix:280:14:

          279|       spliced = extra spliced0 // spliced0 // keep self;
          280|       self = f self // {
             |              ^
          281|         newScope = scope: newScope (spliced // scope);

       … while evaluating 'makeScopeWithSplicing'

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/customisation.nix:269:80:

          268|      hopefully it helps a little bit. */
          269|   makeScopeWithSplicing = splicePackages: newScope: otherSplices: keep: extra: f:
             |                                                                                ^
          270|     let

       … from call site

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/pkgs/development/interpreters/python/default.nix:84:12:

           83|           aliases = self: super: lib.optionalAttrs config.allowAliases (import ../../../top-level/python-aliases.nix lib self super);
           84|         in lib.makeScopeWithSplicing
             |            ^
           85|           pkgs.splicePackages

       … while evaluating anonymous lambda

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/pkgs/development/interpreters/python/default.nix:30:10:

           29|         # - applies overrides from `packageOverrides` and `pythonPackagesOverlays`.
           30|         ({ pkgs, stdenv, python, overrides }: let
             |          ^
           31|           pythonPackagesFun = import ../../../top-level/python-packages.nix {

       … from call site

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/customisation.nix:69:16:

           68|     let
           69|       result = f origArgs;
             |                ^
           70|

       … while evaluating 'makeOverridable'

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/customisation.nix:67:24:

           66|   */
           67|   makeOverridable = f: origArgs:
             |                        ^
           68|     let

       … from call site

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/customisation.nix:168:34:

          167|
          168|     in if missingArgs == [] then makeOverridable f allArgs else throw error;
             |                                  ^
          169|

       … while evaluating 'callPackageWith'

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/lib/customisation.nix:117:35:

          116|   */
          117|   callPackageWith = autoArgs: fn: args:
             |                                   ^
          118|     let

       … from call site

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/pkgs/development/interpreters/python/default.nix:25:24:

           24|     }: let
           25|       pythonPackages = callPackage
             |                        ^
           26|         # Function that when called

       … while evaluating the attribute 'passAsFile'

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/pkgs/build-support/buildenv/default.nix:77:5:

           76|     # XXX: The size is somewhat arbitrary
           77|     passAsFile = if builtins.stringLength pkgs >= 128*1024 then [ "pkgs" ] else [ ];
             |     ^
           78|   }

       … while evaluating the attribute 'passAsFile' of the derivation 'python3-3.9.13-env'

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/pkgs/stdenv/generic/make-derivation.nix:270:7:

          269|     // (lib.optionalAttrs (attrs ? name || (attrs ? pname && attrs ? version)) {
          270|       name =
             |       ^
          271|         let

       … while evaluating the attribute 'nativeBuildInputs' of the derivation 'nix-shell'

       at /nix/store/ybq0d98m9n7h2cc0l04lci2bhl7q7di5-source/pkgs/stdenv/generic/make-derivation.nix:270:7:

          269|     // (lib.optionalAttrs (attrs ? name || (attrs ? pname && attrs ? version)) {
          270|       name =
             |       ^
          271|         let