# Recommended setup for developing packages

**URL:** <https://discourse.julialang.org/t/recommended-setup-for-developing-packages/5725>\
**Category:** General Usage\
**Tags:** package, development\
**Created:** [September 5, 2017, 10:35am UTC](https://discourse.julialang.org/t/recommended-setup-for-developing-packages/5725 "2017-09-05T10:35:25Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![tamasgal](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamasgal/32/27946_2.png) [@tamasgal](https://discourse.julialang.org/u/tamasgal)\
**Post date:** [September 5, 2017, 10:35am UTC](https://discourse.julialang.org/t/recommended-setup-for-developing-packages/5725/1 "2017-09-05T10:35:26Z")

</div>

When I work on my own Julia packages, I currently do a `Pkg.clone(...)` from my git repository to install the package with all its dependencies and register it to the package system. After that I delete the package folder in the `.julia` directory and create a symlink with the same name, pointing to a local clone of the original git repository.  
This way I can work on the package and I can test the changes in the REPL/notebooks/scripts immediately.

This workflow however seems quite odd and I wanted to know how you are dealing with this.

---

<div class="post-metadata">

**Author:** ![cstjean](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cstjean/32/1444_2.png) [@cstjean](https://discourse.julialang.org/u/cstjean)\
**Post date:** [September 5, 2017, 1:20pm UTC](https://discourse.julialang.org/t/recommended-setup-for-developing-packages/5725/2 "2017-09-05T13:20:18Z")

</div>

Why don’t you work straight in the .julia directory? You can symlink to it.

---

<div class="post-metadata">

**Author:** ![tamasgal](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamasgal/32/27946_2.png) [@tamasgal](https://discourse.julialang.org/u/tamasgal)\
**Post date:** [September 5, 2017, 1:47pm UTC](https://discourse.julialang.org/t/recommended-setup-for-developing-packages/5725/3 "2017-09-05T13:47:56Z")

</div>

I don’t like entangling my work with other stuff, especially when other scripts are acting in that folder. Also I might forget about it when wiping the .julia directory e.g. 😉

---

<div class="post-metadata">

**Author:** ![lobingera](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lobingera/32/211_2.png) [@lobingera](https://discourse.julialang.org/u/lobingera)\
**Post date:** [September 5, 2017, 2:35pm UTC](https://discourse.julialang.org/t/recommended-setup-for-developing-packages/5725/4 "2017-09-05T14:35:31Z")

</div>

you are aware of git branch?

---

<div class="post-metadata">

**Author:** ![tamasgal](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamasgal/32/27946_2.png) [@tamasgal](https://discourse.julialang.org/u/tamasgal)\
**Post date:** [September 5, 2017, 2:36pm UTC](https://discourse.julialang.org/t/recommended-setup-for-developing-packages/5725/5 "2017-09-05T14:36:45Z")

</div>

Yes.

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [September 5, 2017, 3:16pm UTC](https://discourse.julialang.org/t/recommended-setup-for-developing-packages/5725/6 "2017-09-05T15:16:32Z")

</div>

I also use symlinks.

---

<div class="post-metadata">

**Author:** ![tamasgal](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamasgal/32/27946_2.png) [@tamasgal](https://discourse.julialang.org/u/tamasgal)\
**Post date:** [September 5, 2017, 3:36pm UTC](https://discourse.julialang.org/t/recommended-setup-for-developing-packages/5725/7 "2017-09-05T15:36:39Z")

</div>

OK so this approach seems not to be so awkward 😉

---

<div class="post-metadata">

**Author:** ![mkborregaard](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkborregaard/32/556_2.png) [@mkborregaard](https://discourse.julialang.org/u/mkborregaard)\
**Post date:** [September 5, 2017, 3:56pm UTC](https://discourse.julialang.org/t/recommended-setup-for-developing-packages/5725/8 "2017-09-05T15:56:31Z")

</div>

I just work in the folder directly on a dev branch. I don’t see what should talk against doing that.

---

<div class="post-metadata">

**Author:** ![RaulDurand](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rauldurand/32/2044_2.png) [@RaulDurand](https://discourse.julialang.org/u/RaulDurand)\
**Post date:** [September 5, 2017, 5:01pm UTC](https://discourse.julialang.org/t/recommended-setup-for-developing-packages/5725/9 "2017-09-05T17:01:08Z")

</div>

You could also update the JULIA\_LOAD\_PATH variable with your package folder. Later it can be used as an installed package.

---

<div class="post-metadata">

**Author:** ![dlfivefifty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlfivefifty/32/1959_2.png) [@dlfivefifty](https://discourse.julialang.org/u/dlfivefifty)\
**Post date:** [September 5, 2017, 6:51pm UTC](https://discourse.julialang.org/t/recommended-setup-for-developing-packages/5725/10 "2017-09-05T18:51:14Z")

</div>

I do essentially the same, but have a bash script that deletes the .julia folders and creates the necessary symlinks. This let’s me restart my .julia folder from scratch easily.

---

<div class="post-metadata">

**Author:** ![tamasgal](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamasgal/32/27946_2.png) [@tamasgal](https://discourse.julialang.org/u/tamasgal)\
**Post date:** [September 5, 2017, 6:57pm UTC](https://discourse.julialang.org/t/recommended-setup-for-developing-packages/5725/11 "2017-09-05T18:57:42Z")

</div>

Is there any magic behind `Pkg.add/Pkg.clone` to “register” a package, or is it sufficient to have a folder with the package in the `.julia` folder?

---

<div class="post-metadata">

**Author:** ![tkoolen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tkoolen/32/1603_2.png) [@tkoolen](https://discourse.julialang.org/u/tkoolen)\
**Post date:** [September 5, 2017, 7:37pm UTC](https://discourse.julialang.org/t/recommended-setup-for-developing-packages/5725/12 "2017-09-05T19:37:47Z")

</div>

I set `JULIA_PKGDIR` to where I want the packages I develop to live (along with their dependencies). My `~/.julia` does not contain any packages. This allows me to have separate pkgdirs for separate projects, which could otherwise have resulted in conflicting version requirements.

I then have a couple of convenient bash aliases in my `~/.bashrc`:

```julia
alias julia-pkgdir='export JULIA_PKGDIR=`pwd`'
alias rbd-devel='cd ~/code/RigidBodyDynamics && julia-pkgdir && cd v0.6/RigidBodyDynamics'

```

The first simply sets `JULIA_PKGDIR` to your current directory. The second sets `JULIA_PKGDIR` and `cd`s to the main package I’m working on in one simple command, so I can get to work (just an example).

---

<div class="post-metadata">

**Author:** ![mkborregaard](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkborregaard/32/556_2.png) [@mkborregaard](https://discourse.julialang.org/u/mkborregaard)\
**Post date:** [September 5, 2017, 8:02pm UTC](https://discourse.julialang.org/t/recommended-setup-for-developing-packages/5725/13 "2017-09-05T20:02:21Z")

</div>

Everybody’s got their own little bash script it seems 🙂 Perhaps we will have a more standardized workflow with Pkg3 and it’s immutable package installs?

---

<div class="post-metadata">

**Author:** ![djsegal](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/djsegal/32/13752_2.png) [@djsegal](https://discourse.julialang.org/u/djsegal)\
**Post date:** [September 6, 2017, 1:41am UTC](https://discourse.julialang.org/t/recommended-setup-for-developing-packages/5725/14 "2017-09-06T01:41:49Z")

</div>

further discussed in a juleps issue:

[https://github.com/JuliaLang/Juleps/issues/31](https://github.com/JuliaLang/Juleps/issues/31)

---

<div class="post-metadata">

**Author:** ![anon94023334](https://avatars.discourse-cdn.com/v4/letter/a/e274bd/32.png) [@anon94023334](https://discourse.julialang.org/u/anon94023334)\
**Post date:** [September 6, 2017, 2:13am UTC](https://discourse.julialang.org/t/recommended-setup-for-developing-packages/5725/15 "2017-09-06T02:13:17Z")

</div>

I use symlinks too, but I symlink from `~/.julia/v0.6` to directories in `~dev/julia`. That way if I wipe `~/.julia`, my development work doesn’t disappear.

---

<div class="post-metadata">

**Author:** ![rveltz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rveltz/32/2707_2.png) [@rveltz](https://discourse.julialang.org/u/rveltz)\
**Post date:** [January 19, 2018, 7:52am UTC](https://discourse.julialang.org/t/recommended-setup-for-developing-packages/5725/16 "2018-01-19T07:52:58Z")

</div>

How can you do this please?

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [January 19, 2018, 10:50am UTC](https://discourse.julialang.org/t/recommended-setup-for-developing-packages/5725/17 "2018-01-19T10:50:07Z")

</div>

Eg using `ln` in the command line, assuming you are on Linux or OS X.

---

<div class="post-metadata">

**Author:** ![rveltz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rveltz/32/2707_2.png) [@rveltz](https://discourse.julialang.org/u/rveltz)\
**Post date:** [January 19, 2018, 11:02am UTC](https://discourse.julialang.org/t/recommended-setup-for-developing-packages/5725/18 "2018-01-19T11:02:06Z")

</div>

I was looking for a MWE 😅 More precisely, if my package (e.g. PDMP) is in /Users/rveltz/dev/julia/PDMP.jl how do I symlimk things?

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [January 19, 2018, 11:09am UTC](https://discourse.julialang.org/t/recommended-setup-for-developing-packages/5725/19 "2018-01-19T11:09:03Z")

</div>

Something like

```bash
ln -s /Users/rveltz/dev/julia/PDMP.jl ~/.julia/v0.6/PDMP

```

`man ln` is your friend.

---

<div class="post-metadata">

**Author:** ![rveltz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rveltz/32/2707_2.png) [@rveltz](https://discourse.julialang.org/u/rveltz)\
**Post date:** [January 19, 2018, 11:10am UTC](https://discourse.julialang.org/t/recommended-setup-for-developing-packages/5725/20 "2018-01-19T11:10:17Z")

</div>

no, you are!! Thank you.
