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

今天在看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文件中,加入有效目录,使之成为搜索路径。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,723评论 6 427
  • 环境管理管理Python版本和环境的工具。p–非常简单的交互式python版本管理工具。pyenv–简单的Pyth...
    MrHamster阅读 9,243评论 1 61
  • 类 类的概念在许多语言中出现,很容易理解。它将数据和操作进行封装,以便将来的复用。 模块 模块,在Python可理...
    随风化作雨阅读 5,861评论 0 5
  • 持续分享94天,20171015。张红。 今天睡得早,差一点忘了写分享了呢!周末两天,很辛苦,一直在和儿子斗智...
    啊呦a7_94阅读 1,352评论 0 1
  • 美人职业装, 素颜马尾长。 空里偷眼笑, 人前要端庄。
    季朗涛阅读 3,068评论 4 0