zoukankan      html  css  js  c++  java
  • Python-不同子目录之间进行模块调用时的路径问题

           在Python的不同子目录中进行模块调用时会出现“ModuleNotFoundError: No module named 'backend'” 之类的问题,因为Python在执行时默认会将当前目录加入到sys.path中,然后会根据sys.pyth中的路径去找需要导入的模块,如果找不到就会报错,因此我们需要将模块的最上级目录(如下图中的pathtest)的绝对路径添加到sys.path中,然后就可以按照“from backend.func import login”的方式将模块正常导入了,详见如下事例:

    1、目录结构如下图:

    2、在main.py中调用login.py中的login函数:

    #!/usr/bin/env python
    #_*_ coding:utf-8 _*_  
    #encoding=utf-8
    #function:
    #created by xkq
    #date: 2018
    
    import sys,os
    base_dir=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#获取pathtest的绝对路径
    #os.path.abspath(__file__)#获取当前文件的绝对路径
    #os.path.dirname(os.path.abspath(__file__))#获取当前文件所在目录的绝对路径
    #print(sys.path)
    sys.path.append(base_dir)#将pathtest的绝对路径加入到sys.path中
    from backend.func import login
    login.login()

      

    3、login.py中的的内容如下:

    #!/usr/bin/env python
    #_*_ coding:utf-8 _*_  
    #encoding=utf-8
    #function:
    #created by xkq
    #date: 2018
    def login():
        print('login verify........')
    

    4、注意:写文件是要绝对路径,否则其他子模块调用文件是会报错如:FileNotFoundError: [Errno 2] No such file or directory: 'user.pickle'。可以用如下方法写绝对路径:

    file=os.path.join(os.path.dirname(os.path.abspath(__file__)), 'user.pickle')#user.pickle的绝对路径
    #file='user.pickle'
    f=open(file,'rb')
    user_all=pickle.load(f)
    f.close()
    

      

     

  • 相关阅读:
    hdoj:2033
    hdoj:2032
    hdoj:2031
    hdoj:2029
    hdoj:2028
    hdoj:2027
    hdoj:2024
    hdoj:2023
    hdoj:2022
    hdoj:题目分类
  • 原文地址:https://www.cnblogs.com/qqran/p/8822478.html
Copyright © 2011-2022 走看看