先看一个例子
假设文件结构如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 project/ │ ├── app/ │ ├── scripts/ │ │ ├── GroupManager/ │ │ │ ├── main.py │ │ │ ├── banned_words.py │ │ │ ├── group_status.py │ │ │ ├── invite_chain.py │ │ │ ├── welcome_farewell.py │ │ │ ├── group_management.py │ ├── api/ │ ├── config.py
代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 import loggingimport reimport osimport syssys.path.append( os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) ) from app.scripts.GroupManager.banned_words import *from app.scripts.GroupManager.group_status import *from app.scripts.GroupManager.invite_chain import *from app.scripts.GroupManager.welcome_farewell import *from app.scripts.GroupManager.group_management import *from app.api import *from app.config import owner_idDATA_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "data" )
解释一下下面这段代码
1 2 3 sys.path.append( os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) )
这段代码的作用是将一个目录路径添加到 Python 的模块搜索路径中。具体来说,它通过多次调用os.path.dirname
函数,逐级向上查找目录,最终找到项目的根目录,并将其添加到sys.path
中。这样,Python 在导入模块时,就可以从这个根目录开始搜索,从而找到项目中的模块。
在这里是首先获取当前文件的绝对路径,然后获取其上级目录,再获取上级目录,最后获取上级目录,然后将这个目录添加到 Python 的模块搜索路径中。获取了三层路径,最后把路径project/app
添加到 sys.path 中。如此就可以通过绝对路径导入模块。例如from app.scripts.GroupManager.banned_words import *
下面再解释一下下面的代码
1 DATA_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "data")
这里是获取当前文件的绝对路径,然后获取其上级目录,然后将data
目录添加到这个路径中,然后赋值给DATA_DIR
。