42

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

 5 years ago
source link: https://foofish.net/package-module-tips.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

有同学问题关于模块与包的问题,特给新人总结的关于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,除了第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

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 import * ,有不可预知的风险

9、没有了。

关注公众号「Python之禅」(id:vttalk)获取最新文章 6BzeUzJ.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK