# Making 1.9 weak dependency work

**URL:** https://discourse.julialang.org/t/making-1-9-weak-dependency-work/97600
**Category:** General Usage
**Tags:** pkg
**Created:** [April 18, 2023, 6:01am UTC](https://discourse.julialang.org/t/making-1-9-weak-dependency-work/97600 "2023-04-18T06:01:02Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![bgctw](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bgctw/32/22050_2.png) [@bgctw](https://discourse.julialang.org/u/bgctw)
#### Post date: [April 18, 2023, 6:01am UTC](https://discourse.julialang.org/t/making-1-9-weak-dependency-work/97600/1 "2023-04-18T06:01:02Z")

</div>

I try update from @require to julia 1.9 weak dependency by following the [Pkg documentation](https://pkgdocs.julialang.org/dev/creating-packages/#Conditional-loading-of-code-in-packages-(Extensions)) at a branch of the [DistributionFits](https://github.com/bgctw/DistributionFits.jl/tree/weakdep) package.  
It works with Require in Julia 1.8.4, but I do not get it to work with Julia 1.9.0-rc2.  
I do not want `DistributionFits` to depend on `Optim` (dependency inversion: dependencies should refer only to stable abstractions, not to volatile concretions). If Optim is available, I define a specific `AbstractDistributionFitOptimizer` and configure `DistributionFits` to use it.

I do using

```julia
using Pkg: Pkg
Pkg.activate(; temp=true)
Pkg.add("Optim")
Pkg.develop("DistributionFits")
using Optim, DistributionFits

```

How can I acccess the extension module, `DistributionFitsOptimExt`? It is not available at the global namespace nor as a name inside `DistributionFits` (as with Require). Furthermore, the command `DistributionFits.set_optimizer(OptimOptimizer())` inside the extension module seems to not get executed, because the `DistributionFits.df_optimizer` is still a `NotSetOptimizer`.

What did I miss?

---

<div class="post-metadata">

### Author: ![marius311](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/marius311/32/3953_2.png) [@marius311](https://discourse.julialang.org/u/marius311)
#### Post date: [April 18, 2023, 6:54am UTC](https://discourse.julialang.org/t/making-1-9-weak-dependency-work/97600/2 "2023-04-18T06:54:46Z")

</div>

> [@bgctw](#):
>
> How can I acccess the extension module

`Base.get_extension(DistributionFits, :DistributionFitsOptimExt)`

> [@bgctw](#):
>
> the command `DistributionFits.set_optimizer(OptimOptimizer())` inside the extension module seems to not get executed

I think it may need to go in the extension module’s ` __init__ ` function due to how precompilation works.

---

<div class="post-metadata">

### Author: ![bgctw](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bgctw/32/22050_2.png) [@bgctw](https://discourse.julialang.org/u/bgctw)
#### Post date: [April 18, 2023, 4:36pm UTC](https://discourse.julialang.org/t/making-1-9-weak-dependency-work/97600/3 "2023-04-18T16:36:15Z")

</div>

Thanks @marius311  
I discovered: `Base.get_extension(DistributionFits, :DistributionFitsOptimExt)` (get rather than load, which resulted in errors):

`DistributionFitsOptimExt = isdefined(Base, :get_extension) ? Base.get_extension(DistributionFits, :DistributionFitsOptimExt) : DistributionFits.DistributionFitsOptimExt`

The second option works with Require.  
Putting the initialization code to ` __init__ ` of the [extension package](https://github.com/bgctw/DistributionFits.jl/blob/266a33a6f19a9db9937e923766a5e3af5d2ddffa/ext/DistributionFitsOptimExt.jl#L13) solved the problem, without obtaining an explicit reference to the module.

---

<div class="post-metadata">

### Author: ![marius311](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/marius311/32/3953_2.png) [@marius311](https://discourse.julialang.org/u/marius311)
#### Post date: [April 18, 2023, 4:37pm UTC](https://discourse.julialang.org/t/making-1-9-weak-dependency-work/97600/4 "2023-04-18T16:37:13Z")

</div>

My bad, youre right its `get_extension` (edited to reflect so not to confuse any future people)
