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本身就是一个模块,而它的模块名就是其包名。

 

你可能感兴趣的:(Python,python)