[Tutor] What is the best way for a program suite to know where it is installed?
Cameron Simpson
cs at cskk.id.au
Mon Oct 22 23:19:20 EDT 2018
On 22Oct2018 19:26, boB Stepp <robertvstepp at gmail.com> wrote:
>On Mon, Oct 22, 2018 at 9:47 AM Mats Wichmann <mats at wichmann.us> wrote:
>> As you've concluded by now, this isn't a completely trivial exercise,
>> and you'll possibly get asked the question "why do you think you need to
>> know that?".
>
>Actually no one has yet asked me this question, and you have me
>intrigued. Importing the various program modules/module contents is
>no issue. Where I believe I need to know the paths to things are to
>get to data folders, config files, and occasionally utility programs
>that I have written that are on my hard drive, but not copied to my
>current program suite.
Data folders inbuilt to your app? (I'm going to call it an "app" purely
for convenience.) Not sure there's a universally good answer for this.
You can include data files in your package I think (haven't tried this,
as far as PyPI/pip goes), which means you could locate them from your
source code.
Happy to hear more on this from others.
Config files:
I'm coming to be of the opinion, based on a couple of things I'm
writiing at the moment, that apps should (a) come with a builtin default
config (possibly computed form the environment the find themselves
executed in) and that (b) that config should be expressed in a class
instance which can transcribe itself to a file in the right format.
Why?
It solves the "where is it" problem: it is in the code, as some function
which constructs the app's config instance in the absense of a config
file.
It solves the "how does the user get their first config file for later
hacking/customisation"? If the config file is not in the well known
place (~/.your-apprc or ~/.config/something, etc) then having made your
default config you can transcribe it to the default place. Now the user
has a file they can modify.
It also solves the "incomplete config file" problem: if you can
construct a default config, you can usually handle an incomplete config
as "construct the default, then alter based on the contents of the
config file". Which lets the user keep a tiny config file modifying only
the stuff which needs tweaking.
Utilities:
I my opinion, unless they shift with you app it is the end user's job to
have these in the execution path ($PATH on UNIX). If you app/package
provides them you need a bin directory, with the same issues as your
data files.
Cheers,
Cameron Simpson <cs at cskk.id.au>
More information about the Tutor
mailing list