How do I install a package globally?

Trevor trevor.goodwin at live.com
Sat Nov 11 23:28:18 UTC 2023


On Saturday, 11 November 2023 at 07:12:21 UTC, Christian Köstlin 
wrote:
> On Saturday, 11 November 2023 at 01:50:54 UTC, Trevor wrote:
>> I'm just getting in to D , coming from a C and Python 
>> background. I've had a play with DUB and adding packages to my 
>> project, but it seems like there should be a way to install 
>> packages so they can be used in any D program I compile 
>> without creating a whole package. For example in Python you 
>> can just go "pip install abc" and then any script can use abc.
>>
>> How does one install packages globally, and how can I write 
>> programs that use the third-party packages without being 
>> wrapped in a dub file?
>
> There is no way to install a dependency for all your d programs 
> globally.
> In general you also should be careful about which dependencies 
> you pull in and control them tightly.
>
> In general the approach taken by dub is slightly different.
> The dependencies you are using in all your programs are put to 
> `$HOME/.dub/packages/...` and are in theory available for all 
> your programs, but you still have to tell dub, that you want to 
> use one of them. This is similar to python in that, pip puts 
> your dependencies somewhere in your `$PYTHONHOME` or 
> `$PYTHONPATH` (I am not 100% sure about that).
> You can tell dub (and dub then tells the compiler where to find 
> the dependencies) in two way:
> - Create a complete dub project with dub.json/sdl and add the 
> dependency there (e.g. with `dub add` or while creating the 
> project or by adding them in your editor to the dub.json/sdl)
> - Create a self executing d file (that is run when you just 
> call it like a script and compiled on the fly). See 
> https://dub.pm/advanced_usage#single-file for details.
>
> Another way dub is able to "install" something is by using `dub 
> fetch` to pull a package with a binary in it (e.g. `dub fetch 
> dfmt`). You then can run this executable by `dub run` (e.g. 
> `dub run dfmt -- ... here go the arguments to the dfmt tool).
>
> Kind regards,
> Christian

Thanks for the detailed reply. I guess what I'd like to do is not 
create a DUB package for every little project I work on. It seems 
like most modern languages require a package/dependency manager 
though. Being able to install libraries globally would avoid this 
but I can how that can cause it's own set of issues. It doesn't 
seem efficient in terms of bandwidth and hard disk space to have 
a new copy of a library for each project that uses it?


More information about the Digitalmars-d-learn mailing list