正常写python程序会有一个可执行的bin.py文件,假如这个文件须要导入my_module里面定义的模块,应该怎么设置sys.pathpython
文件夹目录结构以下,由于bin不在与my_module同级目录下,而是在bin目录下,若是直接使用from my_module import main调用模块确定会报错,须要把对应的上一级目录day21_lesson添加到sys.pathapp
一,使用绝对路径添加less
import sys,os sys.path.append(r'D:/blzfmima/python3_s3/day21/day21_lesson/') from my_module import main main.run() print(__name__) if __name__ == '__main__': pass
使用绝对路径把对应的目录添加到sys.path里面至关于把程序写死了,一旦目录结构发生变化或者复制到其余主机将不能运行spa
二,使用相对路径添加code
__file__变量是文件的名称blog
os.path.dirname 是os内置方法取文件的路径这里连续使用两次方法取文件bin.py路径为D:/blzfmima/python3_s3/day21/day21_lesson/bin 而后在针对这个路径再取一次路径获取须要的路径D:/blzfmima/python3_s3/day21/day21_lesson/pycharm
import sys,os BASE_DIR = os.path.dirname(os.path.dirname(__file__)) sys.path.append(BASE_DIR) #sys.path.append(r'D:/blzfmima/python3_s3/day21/day21_lesson/') from my_module import main main.run() print(__name__) if __name__ == '__main__': pass
以上能够在pycharm里面正常实现调用,可是在终端执行仍是会出错,由于Pycharm会自做主张添加绝对路径class
三,终极方法 使用os.path.abspath取文件bin.py绝对路径 而后使用两次os.path.dirname取到上两层的路径及本列的路径D:/blzfmima/python3_s3/day21/day21_lesson/import
import sys,os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_DIR) #sys.path.append(r'D:/blzfmima/python3_s3/day21/day21_lesson/') from my_module import main main.run() print(__name__) if __name__ == '__main__': pass