zoukankan      html  css  js  c++  java
  • 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
    

      

  • 相关阅读:
    (转)ASP.NET-关于Container dataitem 与 eval方法介绍
    WinForm控件复杂数据绑定常用数据源(对Combobox,DataGridView等控件DataSource赋值的多种方法)
    转载 C# BindingSource
    repeater控件实现分页
    JS操作SELECT方法
    C#中的Invoke
    ios深拷贝,浅拷贝,拷贝自定义对象的简单介绍(转)
    IOS的一些尺寸
    ASP.NET多线程下使用HttpContext.Current
    一些xcode5.1创建的工程在xcode6.0下不能编译的问题
  • 原文地址:https://www.cnblogs.com/minseo/p/8360466.html
Copyright © 2011-2022 走看看