如何制作python配置文件,其中定义了相对路径,但是当其他目录中的脚本导入配置时,路径是正确的?

How to make python config file, in which relative paths are defined, but when scripts in other directories import config, paths are correct?

我在 python 中编写的程序具有以下目录结构:

\code\
    main.py
    config.py
    \module_folder1\
        script1.1.py
\data\
    data_file1
    data_file2 

我的config.py是一组全局变量,由用户设置,或者一般是一直固定的。特别是 config.py 定义了 2 个数据文件的路径变量,类似于 path1 = os.path.abspath("../data/data_file1")。主要用途是 运行 main.py 导入 config (和我写的其他模块),一切都很好。

但有时我需要自己运行 script1.1.py。好的,没问题。我可以添加到 script1.1 通常的 if __name__ == '__main__': 并且我可以导入 config。但后来我得到 path1 = "../code/data/data_file1" 不存在。我认为由于路径是在 config.py 中创建的,因此路径将相对于 config.py 所在的位置,但事实并非如此。

所以问题是,我怎样才能有一个定义相对路径的中央配置文件,这样我就可以将配置文件导入不同目录中的脚本并且路径仍然正确?

我应该提一下,代码库将在多台机器之间共享,因此硬编码绝对路径不是一种选择。

  1. 您知道 config.py 所在目录的文件的正确相对路径
  2. 您知道 config.py 所在目录的正确相对路径(在您的情况下,..

这两个东西都是独立于系统的,除非你改变你的项目结构,否则不会改变。只需使用 os.path.join('..', config.path_repative_to_config)

将它们相加即可

(不确定是谁将此作为评论发布,然后将其删除,但它似乎有效,所以我将其作为答案发布。)诀窍是在配置文件中使用 os.path.dirname(__file__),它给出配置文件的目录 (/code/) 而不管导入配置的脚本在哪里。

具体回答问题,在config文件中定义

path1 = os.path.abspath(os.path.join(os.path.join(os.path.join( os.path.dirname(__file__) , '..'), 'data' ), 'data_file1' ) )