[Tutor] What is the best way for a program suite to know where it is installed?
Mats Wichmann
mats at wichmann.us
Mon Oct 22 10:46:16 EDT 2018
On 10/20/18 9:00 PM, boB Stepp wrote:
> I was just re-reading the entire thread at
> https://www.mail-archive.com/tutor@python.org/msg77864.html
> And I have asked similar questions previous to that thread. I still
> do not have a satisfactory answer for the subject line's question that
> both makes sense to me and seems to be good programming practice. And
> that works for any OS that the program suite is installed under.
>
> A constantly recurring situation I am having is a programming project
> with a nested directory structure. Usually I will have "tests" and
> "data" folders nested under the top level project folder. There may
> be others as well depending on the complexity of the project I am
> attempting. As far as I can tell, I cannot make any assumptions about
> what the current working directory is when a user starts the program.
> So how can one of my programs *know* what the absolute path is to,
> say, the top level of the program suite? If I could always reliably
> determine this by my program's code, every other location could be
> determined from the known nested structure of the program suite. [But
> I have a dim recollection that either Ben or Cameron thought relying
> on the "known nested structure" is brittle at best.]
>
> So far the best method I've come up with is to make use of "__file__"
> for the initiating program file. But from past discussions I am not
> certain this is the *best* way. Is the *best* way going to get me
> into best techniques for installing and distributing programs? If so,
> this strikes me as a huge mess to dive into!
>
> TIA!
>
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?".
Probably though this is considered one of the more reliable ways:
import os
if __name__ == '__main__':
script_path = os.path.dirname(os.path.realpath(__file__))
print("Main module at", script_path)
More information about the Tutor
mailing list