Python中._pth文件的作用及说明
作者:顺其自然~
Python在遍历已知的库文件目录过程中,如果见到一个._pth 文件,就会将文件中所记录的路径加入到 sys.path 设置中,于是 .pth 文件说指明的库也就可以被 Python 运行环境找到了。
python中有一个.pth文件,该文件的用法是:
首先xxx._pth文件里面会书写一些路径,一行一个。
将xxx._pth文件放在特定位置,则可以让python在加载模块时,读取xxx._pth中指定的路径。
在python中,一个扩展名.py的文件就是一个模块
1. 使用import语句导入模块
import modulename 导入文件名为modulename.py的所有模块
import modulename [as alias] 设置别名
备注:
使用import导入模块后,每执行一条import语句会创建一个新的命名空间,在该命名空间中执行与.py文件相关的所有语句。
在执行时,需要在具体的变量、函数和类名前加上”模块名.”。
2. 使用from....import语句导入模块
- from modelname import member: 导入某个变量、函数或者类等。
- from modelname import *:导入全部定义
3. 模块搜索顺序
当import 导入模块之后,会按照以下顺序进行查找:
- 1)当前目录下查找
- 2)在PYTHONPATH下的每个目录中查找
- 3)到python默认安装目录下查找
上面的目录可以通过sys的sys.path查看
import sysprint(sys.path)
输出结果:
['E:PyProjectChapter13', 'E:PyProject', 'D:python3python38.zip', 'D:python3DLLs', 'D:python3lib', 'D:python3', 'E:PyProjectvenv', 'E:PyProjectvenvlibsite-packages', 'E:PyProjectvenvlibsite-packagessetuptools-40.8.0-py3.8.egg', 'E:PyProjectvenvlibsite-packagespip-19.0.3-py3.8.egg']
可通过以下3种方式将指定的目录加到path中
- a. 临时加入
import syssys.path.append('E:/')print(sys.path)
输出结果
['E:PyProjectChapter13', 'E:PyProject', 'D:python3python38.zip', 'D:python3DLLs', 'D:python3lib', 'D:python3', 'E:PyProjectvenv', 'E:PyProjectvenvlibsite-packages', 'E:PyProjectvenvlibsite-packagessetuptools-40.8.0-py3.8.egg', 'E:PyProjectvenvlibsite-packagespip-19.0.3-py3.8.egg', 'E:/']
备注:只在当前文件的窗口中有效,窗口关闭后即失效。
- b. 增加.pth文件
在python安装目录下的Libsite-packages中(我的在D:\python3\Libsite-packages),创建扩展名为.pth的文件,文件名自定,在该文件中添加要导入的目录
备注:
此种方法,需要重新打开要执行的导入模块的python文件,否则不生效。
只在当前版本中有效。
- c. 在PYTHONPATH环境变量中添加
打开windows的“环境变量”对话框,若没有PYTHONPATH则需要添加,否则双击PYTHONPATH变量,在弹出对话框的变量值文本中添加新的模块目录,目录之前使用逗号分隔。
备注:
此种方法,需要重新打开要执行的导入模块的python文件,否则不生效。
只在当前版本中有效。
4. 以主程序的形式执行
christmastree.py文件内容为:
pinetree = '我是一颗松树' def fun_christmastree(): ''' 功能:一个梦 无返回值 ''' pinetree = '挂上彩灯、礼物.....我变成一颗圣诞树' print(pinetree)
main.py文件内容为:
import christmastreeprint('全局变量的值为: ', christmastree.pinetree)
第一次使用灰色框中的内容:
输出结果为:
下雪了.....=================开始做梦......==============挂上彩灯、礼物.....我变成一颗圣诞树=================梦醒了......==============我身上落满雪花. 我是一颗松树-_-
第二次使用红色框中的代码:
输出结果:
全局变量的值为: 我是一颗松树
说明:
通俗的理解__name__ == '__main__':
假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明');
在你自己眼中,你是你自己(__name__ == '__main__')。
python为动态解释型语言,也就是从脚本第一行开始运行,没有统一的入口。
每一个模块(.py)都有一个__name__,当模块被直接执行时,此时__name__ '__main__';而被其他模块导入时,此时__name__为被导入的模块名称,程序执行被导入模块的所有代码。
但更多时候只是希望执行部分代码,此时如红框处表示,可以加上if __name__ == '__main__',作为文件的入口。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。