一、模块和包
在Python中有模块和包的概念:
模块 | 一个.py文件就是一个模块(Module) 模块的命名规则: (1)遵循Python变量命名规范,不要使用中文、特殊字符。 (2)模块名不要和系统模块名冲突,最好先查看系统是否已存在该模块,检查方法是在Python交互环境执行import abc,若成功则说明系统存在此模块。 |
---|---|
包 | 定义包(Package)是为了解决模块命名冲突的问题。包也可以理解为目录,即将模块放置于不同的目录中,目录我们可以任意定义。每一个目录下必须包含__init__.py文件,该文件可为空,也可以包含代码。 |
目录示意图如下:
mycompany //顶层目录
├─ web //次级目录
│ ├─ __init__.py
│ ├─ utils.py
│ └─ www.py
├─ __init__.py
├─ abc.py
└─ xyz.py
二、使用模块
1.Python模块的标准文件模板:
#!/usr/bin/env python3 //允许该文件在Unix/Linux/Mac上运行
# -*- coding: utf-8 -*- //表示.py文件本身使用标准UTF-8编码
' a test module ' //一个字符串,表示模块的文档注释,任何模块代码的第一个字符串都被视为模块的文档注释
__author__ = 'Michael Liao' //使用__author__变量表示作者名字
import sys //导入sys模块
def test():
args = sys.argv //sys模块的argv变量,用list存储了命令行的所有参数
if len(args)==1:
print('Hello, world!')
elif len(args)==2:
print('Hello, %s!' % args[1])
else:
print('Too many arguments!')
if __name__=='__main__': //当我们在命令行运行该模块文件时,Python接收器把一个特殊变变量__name__置为__main__,而如果在其他地方导入该模块时,if判断将失败,因此,这种if测试可以让一个模块通过命令行运行时可执行一些而外的代码,最常见的就是运行测试
test()
2.作用域:
在一个模块中,我们可能会定义很多函数和变量,但有的函数和变量我们希望给别人使用(public属性),有的函数和变量我们希望仅仅在模块内部使用(private属性)。在Python中,是通过_前缀来实现的。
实际上,Python并没有一种方法可以完全限制访问private函数或变量,而是约定熟成的:
类型 | 例子 |
---|---|
public | (1)正常变量:abc、x123、PI... (2)特殊变量:__author__、__name__、__doc__... |
private | 内部变量形如_xxx和__xxx:_abc、__abc |
三、安装第三方模块
1.安装第三方模块的方法
(1)第一种方法:pip
首先确保系统上已经安装了pip包管理工具。如果你使用的是Max或Linux,系统本身自带了pip;如果你使用的是Windows系统,在安装Python时将pip和Add python.exe to Path勾选上。
pip命令格式如下:(在cmd窗口中键入)
命令 | 含义 |
---|---|
pip | 显示pip所有的参数使用方法 |
where pip | 查询pip的安装路径 |
pip -V | 查看pip的版本号 |
pip list | 查看已经安装的第三方库 |
pip install 库名(=版本号) | 安装第三方库 |
pip show 库名 | 查看安装库的详细信息 |
pip uninstall 库名 | 卸载第三方库 |
python -m pip uninstall pip | 卸载pip |
(2)第二种方法:Anaconda
Anaconda是一个基于Python的数据处理和科学计算平台,它已经内置了许多非常有用的第三方库。
在官网https://www.anaconda.com/上下载并直接安装,Anaconda会把系统Path中的python指向自己自带的Python,并且Anaconda安装的第三方模块会安装在Anaconda自己的路径下,不影响系统已安装的Python目录。
安装好Anaconda后,重新打开cmd窗口,输入python,可以看到Anaconda的信息:
┌────────────────────────────────────────────────────────┐
│Command Prompt - python - □ x │
├────────────────────────────────────────────────────────┤
│Microsoft Windows [Version 10.0.0] │
│(c) 2015 Microsoft Corporation. All rights reserved. │
│ │
│C:\> python │
│Python 3.6.3 |Anaconda, Inc.| ... on win32 │
│Type "help", ... for more information. │
│>>> import numpy │
│>>> _ │
│ │
│ │
│ │
└────────────────────────────────────────────────────────┘
可以尝试直接import numpy
等已安装的第三方模块。
2.模块搜索路径
(1)查看模块搜索路径
当我们加载一个模块时,默认情况下,Python解释器会搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在sys模块的path变量中:
>>> import sys
>>> sys.path
['', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6', ..., '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages']
如果在指定的目录下查找不到,就会报错:
>>> import mymodule
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named mymodule
(2)添加模块搜索路径:两种方法
第一种方法是直接修改sys.path,添加要搜索的目录:(这种方法是在运行时修改,运行结束后失效)
>>> import sys
>>> sys.path.append('/Users/michael/my_py_scripts')
第二种方法是设置环境变量PYTHONPATH,该环境变量的内容会被自动添加到模块搜索路径中。设置方式和设置Path环境变量类似。注意只需要添加自己的搜索路径,Python自己本身的搜索路径不受影响。