美文网首页
从一个命名错误看Python的模块导入顺序

从一个命名错误看Python的模块导入顺序

作者: everfight | 来源:发表于2017-04-08 15:13 被阅读451次

    今天在看multprocessing部分,源码如下。

        import multiprocessing as mp
    
        def job(a,d):
            print('aaaaaaa')
    
        if __name__=='__main__':
            p1 = mp.Process(target=job,args=(1,2))
            p1.start()
    

    导入multiprocessing部分的时候发生错误:

    AttributeError: module 'multiprocessing' has no attribute 'Process'

    1、最开始以为multprocessing拼写错误,求助字典发现英语拼写无误。
    2、接着判断multiprocessing模块没有安装,后查询发现该模块为自带的。
    3、后来检查得知我源代码的名称也是multiprocessing.py,判断有可能循环导入了自己的这段代码。
    修改名称之后发现程序能够正常运行了。

    从上面的分析得出,Python的模块导入中遵循一定的顺序,本地的模块如果跟内置模块重名,优先导入本地模块。
    查询文档详细解释如下:

    当import一个模块后,python会按照下面的顺序来找那个将要导入的模块文件
    1、程序的主目录。上一讲中,在codes这个目录中运行交互模式,这时候的主目录就是codes,当在那个交互模式中运行import mmmm的时候,就首先在codes这个目录中搜索相应的文件(找到.py之后编译成为.pyc)。当然,后面在网页编程中,看官会看到,所谓主目录是可以通过顶层文件设置的目录。
    2、PYTHONPATH目录。这是一个环境变量设置,如果没有设置则滤去。如何进行环境变量设置,请看官google啦。
    3、标准库目录。已经随着Python的安装进入到计算机中的那个。
    4、任何.pth文件的内容。如果有这类文件,最后要在这类文件中搜索一下。这是一个简单的方法,在.pth文件中,加入有效目录,使之成为搜索路径。

    相关文章

      网友评论

          本文标题: 从一个命名错误看Python的模块导入顺序

          本文链接:https://www.haomeiwen.com/subject/rzvlattx.html