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)