包,模块,__init__,__all__

总结一下自己做的模块或者包import不了的问题:

(1)每个python文件可以看做一个模块

(2)每个文件夹可以看做一个包,包中含有多个模块,即多个python文件

(3)每个包,即每个文件夹都需要一个__init__.py文件,用来管理包内模块的调用。内容比如下面的:

#in __init__.py
from anet import *
from cc import *

(4)如果我们并不需要,或者并不想要调用一个python文件内的所有类,方法和属性,可以在python文件内部使用__all__。举例,在cc模块下使用__all__暴露接口:

#in cc.py
__all__ = ["dog", "cat"]

def dog():
    print("dog")

cat = "cat"

def man():
    print("man")

woman = "woman"

这样在外部调用cc模块的时候,是无法直接使用man方法和woman属性的

(5)同样可以在__init__.py中使用__all__控制暴露的模块:

#in __init__.py

__all__ = ["anet", "cc"]

from anet import *
from cc import *

(6)模块import不了,有可能是python运行时并没有将模块所在路径纳入搜索范围。搜索路径可以通过下面方式查看:

>>> import sys
>>> sys.path

也可以在程序内,将模块路径添加到搜索路径中:

import sys
sys.path.append("~/projects/xxx")

你可能感兴趣的:(Python)