2.3. Using local dev version of a dependency
(written by Jon Eugster)
This tip should be considered a workaround, some care is adviced when trying this non-standard setup!
Note: Things here might change as lake
is being developed, as features described here are not necessarily officially supported by lake
. This file has been written for Lean v4.16.0
. If in doubt, ask for help on Zulip.
In rare circumstances you might want to use a local copy of a dependency (e.g. mathlib
) when developing, i.e. to test changes immediately.
You could do this by using a local dependency while developing
require mathlib from ".." / "mathlib4"
and then change it back to the remote dependency before pushing changes:
require "leanprover-community" / "mathlib"
However, if you want to do this frequently, here might be a better setup. With the suggested modifications to the lakefile.lean
below, you get the following behaviour:
-
To use the local dependency, call
lake update -R -Kmathlib.useDev mathlib
-
To switch back to the remote dependency, call
lake update -R mathlib
-
Anybody
require
-ing your project as dependency in there own project will automatically get the remote version of the dependencies.
(Note: make sure to read the chapter above about specifying versions when using lake update
).
For this you need to replace require "leanprover-community" / "mathlib"
in your lakefile.lean
with the following instructions:
open Lake DSL
/-- The local dependency. Using a relative path. -/
def LocalMathlib : Dependency where
name := `mathlib
src? := some <| .path (".." / "mathlib4")
scope := ""
version? := none
opts := {}
/--
The remote dependency. Note that "master" is the tag/branch
you want to clone from.
-/
def RemoteMathlib : Dependency where
name := `mathlib
/-
You can also write `src? := none` to get the package
from Reservoir instead (if `scope` is specified
correctly), or you can replace `"master"` with
`none` to not specify the input branch/tag.
-/
src? := some <| .git
"https://github.com/leanprover-community/mathlib4.git"
"master" none
scope := "leanprover-community"
version? := none
opts := {}
/-
Choose `mathlib` dependency locally if
`-Kmathlib.useDev` is provided.
-/
open Lean in
#eval (do
let depName :=
if get_config? mathlib.useDev |>.isSome then
``LocalMathlib else ``RemoteMathlib
modifyEnv (fun env =>
Lake.packageDepAttr.ext.addEntry env depName)
: Elab.Command.CommandElabM Unit)