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

posted @ 2023-06-12 10:31  编程驴子  阅读(18)  评论(0编辑  收藏  举报