关于Python包和模块的10个知识清单

新闻 后端
有同学问题关于模块与包的问题,特给新人总结的关于Python包与模块的10个知识清单。

 [[244957]]

有同学问题关于模块与包的问题,特给新人总结的关于Python包与模块的10个知识清单。

0、一个模块(module)就是一个py文件,模块的名字就是该文件的名字(不包含后缀)

1、一个 包(package)就是一个文件夹,(Python2规定该文件夹必须包含一个 __init__.py,Python3没有要求),包名就是文件夹名。

2、按 import 进来的对象不同分为4种场景:

1. import <package>  # 导入一个包 
2. import <module>   # 导入一个模块 
3. from <package> import <module or subpackage or object>  # 从一个包中导入模块/子包/对象 
4. from <module> import <object>  # 从模块中导入对象 
  • 1.
  • 2.
  • 3.
  • 4.

3、解释器会按照sys.path列表的顺序来查找被引入的包或模块名字。

>>> import sys 
>>> import pprint 
>>> pprint.pprint(sys.path) 
[''
 'C:\\Python\\Python35-32\\python35.zip'
 'C:\\Python\\Python35-32\\DLLs'
 'C:\\Python\\Python35-32\\lib'
 'C:\\Python\\Python35-32'
 'C:\\Python\\Python35-32\\lib\\site-packages'
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

优先加载当前工作目录下的模块,如果你的项目中使用了与内建模块中同名的包或模块名,就会遇到没有xx属性之类的报错提示,新手特喜欢干这种事。

4、你可以操作 sys.path,使得其他路径文件加入到Path中,使之能被解释器发现。

# test.py 
import sys, os 
 
# 当前目录没有hi模块,报错找不到模块 
import hi  
Traceback (most recent call last): 
ImportError: No module named hi 
 
# hi模块所在位置: /data/hi.py 
# 将hi所在模块加入sys.path 
sys.path.append("/data"
 
# 可以正常工作了 
import hi 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

5、另外一种加载模块的方法:如果你的模块不在 sys.path,除了第5条方法在外,还可以使用 imp 模块中的方法 imp.load_source

import imp 
 
imp.load_source("hi""C://data/hi.py"
import hi 
 
# 可以自己指定模块的名字,相当与 import hi as h2 
imp.load_source("h2""C://data/hi.py"
import h2 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

6、import module 时,模块中所有的代码将被执行(类对象,函数对象将被创建,不会被调用),import package 时, init .py 文件中的代码也将被执行。 7、模块的 __file__ 属性

导入模块时,可以通过模块的 __file__ 属性查看模块所在磁盘的路径位置

>>> import requests 
>>> requests.__file__ 
'D:\\Programs\\Anaconda3\\envs\\py_test\\lib\\site-packages\\requests\\__init__.py' 
  • 1.
  • 2.
  • 3.

8、永远不要使用 from import * ,有不可预知的风险

9、没有了。

责任编辑:张燕妮 来源: 「Python之禅」
相关推荐

2017-08-24 09:10:05

Python字典代码

2024-05-28 00:00:10

Python模块开发

2018-09-28 14:43:27

RMAN备份实践

2017-07-20 22:10:13

OracleRMAN备份和恢复

2014-10-09 09:46:01

Apache模块

2012-04-08 14:47:52

iPad

2020-01-29 19:13:25

Python数据对象

2018-12-20 10:40:12

Redis架构运维

2020-08-13 10:39:01

公有云云计算云迁移

2017-03-30 22:16:21

DevOpsIT应用程序

2023-10-24 16:03:34

GoGolang

2010-02-23 13:23:53

Python 模块

2019-07-04 16:22:48

虚拟化运维故障

2013-05-27 11:30:41

IPv6IP协议IPv6应用

2020-12-23 14:39:38

物联网人工智能5G

2020-05-09 09:31:15

前端开发Sublime Tex扩展

2020-05-22 16:05:56

UbuntuLinux物联网

2017-08-31 14:25:34

前端JavascriptES6

2014-08-25 10:24:01

Linux

2019-07-15 09:37:03

数据库MySQL技术
点赞
收藏

51CTO技术栈公众号