思路
通过锚点目录,定位项目根目录(项目路径),在任何文件中执行路径获取函数,得到的结果都是正确且唯一的。
一例胜千言
- 比如main.py要import进来一个模块ui.py
- 因为import进来的文件,相当于是以文本方式复制进来,所以它原本的相对路径是以ui.py为参照,但在main.py中执行路径相关的函数时,路径参照物变成main.py了,这点尤其要注意
- 但不论相对位置是以哪个文件为参照,总有一些目录是固定不变的,以PyCharm项目为例,
.idea 是它默认必然生成的目录,且它总是在项目根目录下,所以,我们可以通过以当前文件(任何文件都可以)开始向上遍历,直至定位到某个目录,它有一个子目录名为.idea 即可
代码实现
def get_project_rootpath():
"""
获取项目根目录。此函数的能力体现在,不论当前module被import到任何位置,都可以正确获取项目根目录
:return:
"""
path = os.path.realpath(os.curdir)
while True:
for subpath in os.listdir(path):
if '.idea' in subpath:
return path
path = os.path.dirname(path)
举一反三
那么,当使用的是vsCode构成的项目时,就可以把.idea 换为.vscode ,同理,任何其他工具构成的,都可以找到一个锚点目录,甚至可以是.git 等等。
|