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) _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor