我在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
所在的路径,但事实并非如此。
所以问题是,我怎么能有一个定义相对路径的中央配置文件,所以我可以将配置文件导入到不同目录中的脚本并且路径仍然正确?
我应该提到代码仓库将在多台机器之间共享,因此硬编码绝对路径不是一种选择。
答案 0 :(得分:1)
config.py
所在目录中文件的正确相对路径config.py
所在目录的正确相对路径(在您的情况下为..
)这两件事都与系统无关,除非您更改项目的结构,否则不会更改。只需使用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' ) )