微信号:LovePython

介绍:关注Python编程技术和运用

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

2018-11-06 08:00 刘志军

来自:Python之禅(微信号:VTtalk)


最近来了不少新人,谢谢大家的关注,有同学问到关于模块与包的问题,特给你们总结关于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>  # 从模块中导入对象

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']

优先加载当前工作目录下的模块,如果你的项目中使用了与内建模块中同名的包或模块名,就会遇到没有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

5、另外一种加载模块的方法:如果你的模块不在 sys.path 下面,除了第4条建议外,还可以使用 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

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'

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


●编号542,输入编号直达本文

●输入m获取文章目录

推荐↓↓↓

算法与数据结构

更多推荐25个技术类公众微信

涵盖:程序人生、算法与数据结构、黑客技术与网络安全、大数据技术、前端开发、Java、Python、Web开发、安卓开发、iOS开发、C/C++、.NET、Linux、数据库、运维等。

 
Python编程 更多文章 Python数据分析很难学?60天就够了! 安装的 Python 版本太多互相干扰?以后再也不用担心了。 想转行人工智能?机会来了! 60行Python代码爬取知乎神回复 从初级程序员到编程大牛,只需要每天坚持做这件事情……
猜您喜欢 内含福利|云栖攻略·解锁视频消费新方式 Java编程中“为了性能”一些尽量做到的地方 送两张Ignite大会门票给你,要不要? 傅盛和张颖对谈转型:清空与进化【复盘在猎豹与头条战略合作之际】 [图解Http]第2章-简单的HTTP协议