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

时间:2016-09-01 14:50:37

标签: python module relative-path

我在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所在的路径,但事实并非如此。

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

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

2 个答案:

答案 0 :(得分:1)

  1. 您知道config.py所在目录中文件的正确相对路径
  2. 您知道config.py所在目录的正确相对路径(在您的情况下为..
  3. 这两件事都与系统无关,除非您更改项目的结构,否则不会更改。只需使用os.path.join('..', config.path_repative_to_config)

    将它们添加到一起

答案 1 :(得分:0)

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

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

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