python学习笔记35-脚本有多个文件时如何指定import_path
如果脚本涉及多个文件, 且分布在多个目录中, 则会涉及到import其它目录的文件.
如果脚本不在脚本所在的目录run, 则会涉及到run目录与脚本目录不相关.
如何解决这个问题呢?
假设目录结构如下:
/a/b/c/bin/dfx.py
/a/b/c/atpg/atpg.py
/a/b/c/atpg/atpg_sim.py
/a/b/c/common/my_log.py
/a/b/c/common/my_method.py
/a/b/c/scan/scan.py
/a/b/c/scan/scan_drc.py
其中 bin/dftx.py是脚本入口, 可以在这个文件中修改sys.path, 然后就可以import其它文件了.
import sys
import os
import logging
# 获取路径/a/b/c, 并添加到sys.path中, 这样import时就会在这个路径下找
# sys.argv[0]: 调用脚本时的脚本名, 可以是link的.
# os.path.realpath(): 获取脚本的所在的真实路径(可处理link的情况), /a/b/c/bin/dfx.py
# os.path.dirname(/a/b/c/bin/dfx.py): 获取dfx.py所在的路径: /a/b/c/bin
# os.path.dirname(/a/b/c/bin ): 获取dfx.py所在的路径的上一级路径: /a/b/c
sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(sys.argv[0))))
# 然后就可以import路径/a/b/c下的内容了:
from atpg.atpg import CAtpg
from atpg.atpg_sim import CAtpgSim
from common.my_log import CMyLog
from common.my_method import CMyMethod
from scan.scan import CScan
from scan.scan_sim import CScanSim