Python 模块

与其它语言的项目工程类似,在一个Python工程项目中,一般是多文件的组织方式。有时候分了层次分明,还可能建有多个文件夹来存放不同模块的组织文件。

模块的使用

Python中一个文件可就是一个模块,在一个文件中如果我们需要调用其它文件(模块)里的成员函数就需要使用import导入,然后使用。
我们在同一个目录下建立两个.py文件,myapp.py存放程序的入口,mymodule.py存放一些被调用的函数。
mymodule.py:

#file: mymodule.py
print 'start to import mymodule.py'
name = 'mymodule'
def sayhello():
    print 'hello mymodule!'
print 'start to exit from mymodule.py'

myapp.py:

#File:myapp.py
import mymodule
name = 'myapp'
def sayhello():
    print 'hello mypp!'
sayhello()
print name
mymodule.sayhello()
print mymodule.name

运行结果:

C:\Python27\python.exe F:/python/python_proj/myapp.py
start to import mymodule.py
start to exit from mymodule.py
hello mypp!
myapp
hello mymodule!
mymodule
Process finished with exit code 0

工作流程

从这个程序可以看到,当我们运行myapp.py文件时,首先它会按顺序执行文件里的每一行代码,当执行到import mymodule时,程序会做如下处理:首先找到模块文件,必要的使用编译成位码,然后一行一行地执行模块的代码来创建其所定义的对象。注意,模块在第一次导入时才会做这样的处理,后面导入相同的模块时,会跳过这些处理。

接下来还有一个问题,到导入我们需要的模块时,Python是怎么样找到我们的模块文件的呢?在实际的工程项目中,为了更好地组织代码,模块文件可能放在程序工程目录下的不同文件夹里。Python会到以下几个路径去搜索所需要的模块文件:

  • 程序的主目录(包含程序顶层文件目录或使用交互模式所在目录或当前目录)
  • PATHONPATH目录(Python程序文件的目录的列表)
  • 标准连接库目录
  • 任何.pth文件的内容(用户自己添加到模块搜索路径中的有效目录)

这四个组件组合起来就是sys.path,模块搜索的路径变量。
在Ubuntu下的模块搜索路径如下:

>>> import sys
>>> sys.path
['','/usr/local/lib/python2.7/dist-packages/Flask-0.10.1-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/itsdangerous-0.24-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/Jinja2-2.7.3-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/Werkzeug-0.10.4-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/MarkupSafe-0.23-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/mysql_connector_python-2.0.3-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/aiohttp-0.16.3-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/asyncio-3.4.3-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/mysql-0.0.1-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/Django-1.7.8-py2.7.egg', 
'/usr/lib/python2.7/dist-packages', 
'/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', 
'/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', 
'/usr/lib/python2.7/lib-dynload', 
'/usr/local/lib/python2.7/dist-packages', 
'/usr/lib/python2.7/dist-packages/PILcompat', 
'/usr/lib/python2.7/dist-packages/gtk-2.0',
'/usr/lib/python2.7/dist-packages/ubuntu-sso-client']

在Windows下的搜索路径如下:

《Linux三剑客》视频教程,从零开始快速掌握Linux开发常用的工具:Git、Makefile、vim、autotools、debug,免费赠送C语言视频教程,C语言项目实战:学生成绩管理系统。详情请点击淘宝链接:Linux三剑客