Python全栈day21(调用模块路径BASEDIR的正确方法)

Posted minseo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python全栈day21(调用模块路径BASEDIR的正确方法)相关的知识,希望对你有一定的参考价值。

正常写python程序会有一个可执行的bin.py文件,假如这个文件需要导入my_module里面定义的模块,应该怎么设置sys.path

文件夹目录结构如下,因为bin不在与my_module同级目录下,而是在bin目录下,如果直接使用from my_module import main调用模块肯定会报错,需要把对应的上一级目录day21_lesson添加到sys.path

 

  一,使用绝对路径添加

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里面相当于把程序写死了,一旦目录结构发生变化或者复制到其他主机将不能运行

 

  二,使用相对路径添加

  __file__变量是文件的名称

  os.path.dirname 是os内置方法取文件的路径这里连续使用两次方法取文件bin.py路径为D:/blzfmima/python3_s3/day21/day21_lesson/bin 然后在针对这个路径再取一次路径获取需要的路径D:/blzfmima/python3_s3/day21/day21_lesson/

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会自作主张添加绝对路径

 

  三,终极方法 使用os.path.abspath取文件bin.py绝对路径 然后使用两次os.path.dirname取到上两层的路径及本列的路径D:/blzfmima/python3_s3/day21/day21_lesson/

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

  

 

以上是关于Python全栈day21(调用模块路径BASEDIR的正确方法)的主要内容,如果未能解决你的问题,请参考以下文章

Python全栈开发,Day6 - 模块学习

Python全栈之路Day21

Python全栈开发Day4

Python全栈-day14-模块和包

python全栈学习--day39(multiprocess模块)

2018-06-27-Python全栈开发day23-loggingconfigparserhashlib模块