Getting a weird error message in Mix i've not see before. "Because your app depends on XXX empty"

I was updating my Rustler from 0.25 to 0.27, and when I ran mix deps.get, I got the following message which i’ve not seen before. Usually when there’s a dependency mismatch, it’ll state which packages are clashing and over what version they disagree. But this doesn’t have any of that info. I tried removing my mix.lock, and runnning mix deps.clean. If I remove rustler entirely from my mix.exs then it’ll run, and if my rustler is 0.25 it’ll run, but when I set it to 0.27 it fails.

Mix.ex

...
{:rustler, "~> 0.27.0"},
...
$ mix deps.get
Resolving Hex dependencies...
Resolution completed in 0.03s
Because your app depends on rustler empty which doesn't match any versions, version solving failed.
** (Mix) Hex dependency resolution failed

I can’t add the bold and code formatting, but the error message appears like this: “Because your app depends on rustler empty which doesn’t match any versions, version solving failed.”

EDIT:

It also happens if I try to change {:httpoison, "~> 1.0"}, to {:httpoison, "~> 2.0"},

Because your app depends on httpoison empty which doesn’t match any versions, version solving failed.

Also, your app here is verbatim, not something i’ve replaced to generalize it.

1 Like

One possible solution is to run mix deps.clean rustler or mix deps.clean httpoison to remove any existing build artifacts, then run mix deps.get again to fetch the latest compatible versions of the packages.

https://hexdocs.pm/mix/1.12/Mix.Tasks.Deps.Clean.html

Hmm, no luck. I’m not sure that’s any different than the mix deps.clean I already tried, which I assume just cleans all deps.

If I add override: true to both rustler and httpoison it does finally work, but i’m still unsure why it was caused or how to fix it properly

2 Likes

I’m guessing one of your transitive dependencies is asking for a version of a direct dependency that Mix sees as having no middle ground.

For the masochistic there’s always: mix deps.tree

1 Like

This was seen on IRC yesterday also, pasting the relevant logs:

10:47:42 <Nicd> I was suspicious of that error message but it’s literally what you said :smiley: https://usercontent.irccloud-cdn.com/file/G9t4aRmi/Screenshot%202023-03-09%20at%2010.47.17.png

10:48:13 <josevalim> Nicd: this is a bug in the hex resolver, i will investigate

10:54:04 <josevalim> here is a minimal example that reproduces the phoenix empty bug:

10:54:07 <josevalim> Snippet | IRCCloud

10:55:58 <josevalim> serafeim: i know what is happening. the scrivener_html does not allow phoenix 1.7. so there is an error but the error message is unclear

So I guess there are conflicting package requirements (some other package doesn’t allow that version of rustler or httpoison), but the error message is bugged.

2 Likes
4 Likes

opened a pr to bump phoenix dep in scrivener_html

cc @josevalim

I see the bump to Phoenix 1.6 is still not in a release…

override: true also worked for me

1 Like

For me it was a local dependency added using path: "vendor/some-dep" in deps in mix.exs. It had a conflicting requirement and it resulted in <dep> empty from mix deps.get. Btw mix deps.tree did help to nail it down so thx @BradS2S!

3 Likes

How did you solve this? I’m also using a dependency using path: "../some-dep.

Solved it by syncing (= making it the same) the required version of conflicting dep (one reporting as “empty”) between the main app and the path-based dep.

1 Like

Bah, I thought I was doing that but I had failed somewhere else on the line. Thanks :slight_smile: Thanks