Using `Mix.install/2` to fetch dependencies from GitHub

Originally sent in Elixir Chat
Myriam2002

hey! I am new to this community :slight_smile: I am having trouble with versions and dependencies in elixir. This error happens with many of the packages.

Mix.install([
  {:axon_onnx, "~> 0.4"},
  {:axon, "~> 0.5"},
  {:nx, "~> 0.5"},
  {:exla, "~> 0.5"},
  {:stb_image, "~> 0.6"},
  {:kino, "~> 0.8"}
])

and those errors appear could not compile dependency :axon_onnx, "mix compile" failed. Errors may have been logged above. You can recompile this dependency with "mix deps.compile axon_onnx --force", update it with "mix deps.update axon_onnx" or clean it with "mix deps.clean axon_onnx"

imcarlows

What are the errors? Maybe you got some error logs before that message?

Eiji

@imcarlows You can just copy-paste it into iex.

@Myriam2002 This is a known issue. You should use latest commits:

Mix.install([axon: "~> 0.5", axon_onnx: [github: "mortont/axon_onnx"], exla: "~> 0.5", kino: "~> 0.8", nx: "~> 0.5", stb_image: "~> 0.6"])

See: Compilation error in file lib/axon_onnx/shared.ex · Issue #55 · mortont/axon_onnx · GitHub for more information

Myriam2002

@Eiji Thank you!

did the same for EXLA

Mix.install([
  axon: "~> 0.5",
  axon_onnx: [github: "mortont/axon_onnx"],
  xla: [github: "elixir-nx/nx/tree/main/exla"], 
  kino: "~> 0.8", 
  nx: "~> 0.5", 
  stb_image: "~> 0.6"]) but this was the error: ** (Mix.Error) Command "git --git-dir=.git fetch --force --quiet --progress" failed
    (mix 1.15.7) lib/mix.ex:577: Mix.raise/2
    (mix 1.15.7) lib/mix/scm/git.ex:132: Mix.SCM.Git.checkout/2
    (elixir 1.15.7) lib/file.ex:1624: File.cd!/2
    (mix 1.15.7) lib/mix/dep/fetcher.ex:61: Mix.Dep.Fetcher.do_fetch/3
    (mix 1.15.7) lib/mix/dep/converger.ex:229: Mix.Dep.Converger.all/8
    (mix 1.15.7) lib/mix/dep/converger.ex:244: Mix.Dep.Converger.all/8
    (mix 1.15.7) lib/mix/dep/converger.ex:162: Mix.Dep.Converger.init_all/8
    #cell:setup:1: (file)
Eiji

@Myriam2002 Firstly you cannot pass a tree path directly into this option. It accepts any string as-is, so please don't use it blindly and read the documentation.

Before you do anything please read documentation especially Git options (:git) section of mix deps task documentation.

Here is an updated command with a correct xla repository data:

Mix.install([axon: "~> 0.5", axon_onnx: [github: "mortont/axon_onnx"], xla: [github: "elixir-nx/xla"], kino: "~> 0.8", nx: "~> 0.5", stb_image: "~> 0.6"])

Note: I have fixed markdown for an Elixir code in @Myriam2002 messages.
Secondly you try to get xla application giving path to exla directory. Even if below option would work as you expect it would fail anyway, because exla depends on xla and therefore you would get a weird errors that the application refers to itself.

Helpful resources

  1. Mix.install/2 function
  2. mix deps task documentation