Path: news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail From: Jason H Newsgroups: comp.lang.python Subject: Re: Best practice for config files? Date: Sat, 24 May 2025 11:46:25 -0000 (UTC) Organization: A noiseless patient Spider Lines: 36 Message-ID: <100sbih$mdvl$1@dont-email.me> References: <100nvn0$3kq1t$1@dont-email.me> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Sat, 24 May 2025 13:46:25 +0200 (CEST) Injection-Info: dont-email.me; posting-host="074d6e6827f1ff21623eabd3b7feae90"; logging-data="735221"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18POe/fbNOKZWPFl1eTvvQUbp0ropEEOkQ=" User-Agent: PhoNews/3.13.3 (Android/15) Cancel-Lock: sha1:aGrcltZdBJV7bhzStFwVwk5Tzvo= In-Reply-To: <100nvn0$3kq1t$1@dont-email.me> On 22/05/2025 20:59, Michael F. Stemper wrote: >I recently wrote a program to do some record-keeping for me. I found >myself hard-coding a bunch of different values into it. This didn't >seem right, so I made my first use of configparser.ConfigParser(). >Created the configuration file and everything is working fine. > >However, I wrote it based on the assumption that the program is >running in the directory where the config file is stored, and has >a specific name. I started having some second thoughts here. > >I thought about putting the location of the configuration file in >the configuration file, but that seemed like a non-starter.[1] > >Should I specify the location of the config file with a command-line >option, or is requiring the program to be executed in the directory >containing the configuration file considered acceptable practice? > > > >[1] See Tegan Jovanka in _Castrovalva_ for more on this idea. So, I use an environment variable because my config is shared between Python and Java auto test frameworks. I think keeping the config adjacent to the .py files is also workable because a Python program can know where it is: from pathlib import Path script_path = Path(__file__).resolve() script_directory = script_path.parent print(f"The script is located at: {script_path}") print(f"The script is located in the directory: {script_directory}") -- A PICKER OF UNCONSIDERED TRIFLES