Python基础之模块管理

一 为什么需要模块和包

随着项目越来越大,所有代码都放在一个文件中,已经不能满足我们的需求了。这时候就要将代码进行整理了,模块和包的出现就是为了解决这个问题的。模块可以将一些相关联的代码组合在一个py文件中,包可以将一些相关联的模块组合在一个文件夹中。

二 将一个模块导入到当前文件中的几种方式

1.import

导入某个模块。以后要使用模块中的函数或者方法或者变量,则需要使用模块名.xxx的形式调用。

2.from xxx import xxx

从某个模块中导入某个对象或者方法等。也可以一次性的从模块中导入所有的对象。使用from xxx import *。

from c import c_method
from d import my_add
# import c

print('hello world')

print('b end')

3.from a import b as c

从a中导入b并命名为c。以后在代码中引用b,通过c来引用。

三 包

包其实本质上就是一个文件夹,将一些相关联的模块组合在一起。但是如果一个文件夹要让Python识别为一个包,则必须在这个文件夹中创建一个叫做__init__.py的文件。一个文件夹中只有拥有了__init__.py这个文件,才能被视为一个包。
在同一个包中的模块如果要互相导入,则只能通过相对的方式进行导入,即:from . import xxx。

all

如果是在模块中写了这个变量,将控制from 模块名字 import *的行为。
如果在__init__.py文件中有这个变量,那么它将控制着from 包 import *的行为。

__all__ = ['GLOBAL_ZHILIAO','hello','Person']

GLOBAL_ZHILIAO = 'zhiliao'

def hello():
	print('hello')

class Person(object):
	def __init__(self):
		print('person init method')
# 1. 模块__all__变量的作用
# from zhiliao import *
# print(GLOBAL_ZHILIAO)
# hello()
# p1 = Person()

# 2. 包中__all__变量的作用
# 从包中import *,将不能导入任何模块
from tools import *
my_file.save_data("")
my_request.get_request('www.baidu.com')

五 模块的搜索路径

在当前目录下搜索模块。
在环境变量PYTHONPATH中搜索模块。
在Python安装路径下的Lib目录下查找。
使用os.path可以看到所有的查找路径。

from tools import my_request
my_request.get_request('xxx')

import sys
print(sys.path)

六 模块的循环导入

比如有现在目录中有两个模块,一个a.py,一个b.py。在a.py中引用了b。而在b.py中又引用了a,那么这时候就产生了循环导入,让两个导入都不能完成。

name

如果是作为主程序来运行,那么等于__main__,如果是作为被导入的方式运行,那么是这个文件的名称。

八 安装包或者模块

可以通过pip或者easy_install安装。pip是现代化的一种安装包的方式,以下讲解pip的常用命令:

1.安装包

pip install requests

2. 安装指定版本的包

 pip install django == 1.10.6

3.卸载包

 pip uninstall django

4.升级包

 pip install -U requests

5.升级pip

 pip install -U pip

6.查看当前pip是哪个版本

 pip --version

7.显示某个已安装的包的信息

 pip show -f <包名>

8.列出当前环境下安装了哪些包

pip list

9. 将当前环境安装的包全部列出来放在文件中

 pip freeze > requirements.txt

10.从某个文件中安装包

pip install -r requirements.txt

11.临时更改安装源,以豆瓣源为例

pip install <包名> -i https://pypi.douban.com/simple

12.永久更改安装源

windows操作系统:在当前用户目录下新建pip/pip.ini,然后在文件中添加以下代码:

  [global]
  index-url = https://pypi.douban.com/simple

Linux/Mac:在用户目录下新建.pip/pip.conf,然后在文件中添加以下代码:

  [global]
  index-url = https://pypi.douban.com/simple

九 import解析

1.sys.modules

#coding: utf-8
import sys
# import b
# 1. 执行b模块中的代码

# 2. 将b这个模块添加到sys.modules这个字典中
# import b
# sys.modules的作用:用来判断某个模块是否已经被导入到当前文件中
# is_in_modules = 'b' in sys.modules
# print(is_in_modules)
# import b

# 3. 在当前文件中,创建一个变量叫做b来指向b这个模块
# import b
# import os

from b import my_add
# 1. 执行b模块中所有的代码
# 2. 将b这个模块加到sys.modules中
print('b' in sys.modules)
# 3. 创建一个变量叫做my_add,指向了b模块下的my_add函数

2.import流程

# import b做的第一件事情,就是判断b是否在sys.modules这个字典中存在
# 1. 如果存在,就不再去导入b了。也就是说,就不会再去执行b模块中的代码
# 了
# 2. 如果不存在,就会导入b。然后执行b这个模块中的代码
# import b
from d import my_add

print('c file')

def c_method():
	print('c method')

my_add(1,2)

十 _ _ name _ _

from tools import my_file

print('main:'+__name__)

# 如果一个Python文件或者模块是作为被导入来运行的,
# 那么就不是作为主运行文件来执行的

# 如果直接通过python a.py 那么a.py就是作为主运行文件来执行的

def main():
	print('hello')

if __name__ == '__main__':
	main()

# 1. 如果在主运行文件中:__name__是等于__main__
# 2. 如果在模块中:__name__是等于模块名。如果还处在某个包下面
# 等于`包名.模块名`
# 3. 如果在包的__init__文件中,那么等于包的名字
  • 44
    点赞
  • 157
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来自万古的忧伤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值