Python 3 - 2015年11月18日更新
我认为公认的答案是有用的,但我希望根据自己的经验进一步阐述几点,以造福他人。
模块:模块是一个包含Python定义和语句的文件。文件名是附加了.py后缀的模块名。
模块示例:假设当前目录中有一个python脚本,这里我将其命名为mymodule.py
mymodule.py文件包含以下代码:
def myfunc():
print("Hello!")
如果我们从当前目录运行python3解释器,我们可以以以下不同的方式导入并运行myfunc函数(通常只选择以下方式之一):
>>> import mymodule
>>> mymodule.myfunc()
Hello!
>>> from mymodule import myfunc
>>> myfunc()
Hello!
>>> from mymodule import *
>>> myfunc()
Hello!
这很简单。
现在假设您需要将这个模块放到它自己的专用文件夹中,以提供一个模块名称空间,而不是仅仅从当前工作目录中临时运行它。在这里有必要解释包的概念。
包:包是通过使用“点模块名”来构造Python模块名称空间的一种方式。例如,模块名A.B在名为a的包中指定了名为B的子模块。就像使用模块可以使不同模块的作者不必担心彼此的全局变量名一样,使用虚线模块名可以使NumPy或Python成像库等多模块包的作者不必担心彼此的模块名。
包示例:现在假设我们有以下文件夹和文件。这里,mymodule.py与之前相同,__init__.py是一个空文件:
.
└── mypackage
├── __init__.py
└── mymodule.py
需要__init__.py文件才能使Python将这些目录视为包含包的目录。欲了解更多信息,请参阅稍后提供的Modules文档链接。
我们当前的工作目录比称为mypackage的普通文件夹高一级
$ ls
mypackage
如果我们现在运行python3解释器,我们可以通过以下不同的方式导入并运行包含所需函数myfunc的模块mymodule.py(通常只需要选择以下方式之一):
>>> import mypackage
>>> from mypackage import mymodule
>>> mymodule.myfunc()
Hello!
>>> import mypackage.mymodule
>>> mypackage.mymodule.myfunc()
Hello!
>>> from mypackage import mymodule
>>> mymodule.myfunc()
Hello!
>>> from mypackage.mymodule import myfunc
>>> myfunc()
Hello!
>>> from mypackage.mymodule import *
>>> myfunc()
Hello!
假设是Python 3,在:Modules中有很好的文档
在包和模块的命名约定方面,PEP-0008给出了一般准则-请参阅包和模块名称
模块应该有简短的、全小写的名称。如果可以提高可读性,可以在模块名中使用下划线。Python包还应该有简短的、全小写的名称,尽管不鼓励使用下划线。