ModuleNotFoundError: No module named xxx

背景:自己封装了一个package,并且含有多个子package,每个子package下有多个不同的Moudle,然后再引用Moudle时,在pycharm中运行没有问题,但是将这个文件夹放在linux环境下时,出现了错误:ModuleNotFoundError: No module named 'package' 。

结构如下:

package:

    ├─ sub_package0

        │ ├─ __init__.py

        │ ├─ utils.py

        │ └─ www.py

    ├─ sub_package1

        │ ├─ __init__.py

        │ ├─ utils1.py

        │ └─ www1.py

    ....

    ├─ __init__.py

    ├─ abc.py

    └─ xyz.py

网上百度后,主要试了两种方法:

(1)一种是在linux环境的.bashrc中添加环境变量PYTHONPATH,参考:http://blog.sina.com.cn/s/blog_9b1b494a0102vrl3.html

(2)在每个Moudule中通过sys模块来添加路径,参考:https://www.cnblogs.com/dreamyu/p/7889959.html

第一种方法试了之后发现还是报上述错误,而第二种方法由于在每个module中都要添加,所以太麻烦了。为了省去麻烦,直接将package放入anaconda3的安装路径anaconda3/lib/python3.6/site-packages下,该问题得到解决,而site-packages库其实就是pip install安装的package和module的存储位置。

 

附——补充知识

module:模块,一个.py文件可以被称为一个module,使用模块可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,但是也要注意,尽量不要与内置函数名字冲突。

package:包,按目录来组织不同的module,类似于文件夹的作用,通过包来组织模块,避免冲突。引入了包以后,只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。请注意,每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是其包名。

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值