摘要:最近在看的官方文档,提到一个的用法,很是不理解,所以查找了很多文档,并进行了如下总结。的用途定位并执行该模块。可读取包内任何文件内容。如果没有,则从查找,找到后载入内存,并加入到字典,名称也将导入到当前模块的命名空间。
最近在看 __main__ 的官方文档 —— https://docs.python.org/3/library/__main__.html#module-__main__,提到一个 python -m 的用法,很是不理解,所以查找了很多文档,并进行了如下总结。查看 Python 的 help 内容
$ python --help ... -m mod : run library module as a script (terminates option list) # 直译就是按照脚本的方式执行模块 ...有无 -m 参数的比较
1. python script.py # 直接执行脚本 2. python -m script.py # 当做模块的方式执行,相当于 import
一般情况下,我们会想当然的认为,有无参数 -m 对程序会有不同的影响,但是很可惜,第二种写法是会在程序执行之后报错的。其正确的写法是:丢掉 .py 后缀。
首先直观的观察执行结果,Python 的版本是 3.6.3。
编写 script.py 脚本,内容如下:
import sys print(sys.path) print(sys.modules)
直接执行脚本
$ python script.py ["/home/ossifrage/workspaces/python-m", "/usr/lib/python36.zip", "/usr/lib/python3.6", ...] {..., "__main__":, ...}
当做模块方式执行
$ python -m script ["", "/usr/lib/python36.zip", "/usr/lib/python3.6", ...] {..., "__main__":, ..., "runpy": , "pkgutil": }
显示的内容还有很多,只突出显示出了不同的地方。
通过比较不同的地方,我们发现:
第一种方法——直接运行脚本,当前脚本所在的路径会加入到 sys.path 列表中,但是 sys.modules 字典中的 __main__ 的路径不是绝对路径,只是脚本名称。
第二种方法——当做模块方式运行,当前脚本所在的路径不会加入到 sys.path 列表中,但是 sys.modules 字典中的 __main__ 的路径是绝对路径,同时,还引入了 runpy 和 pkgutil 两个模块。
runpy 的用途:定位并执行该模块。主要用途在于实现命令行 -m 执行 python 模块的效果。
pkgutil 的用途:获取包里面的所有模块列表。pkgutil.get_data() 可读取包内任何文件内容。
模块的导入机制其实,上面的内容涉及到了 Python 包模块的导入机制。
要理解模块的导入机制,得理解几个关键的名词。sys.path -> sys.modules -> < module >.__dict__。
sys.path:是一个列表。保存着模块的搜索路径。如果路径没有存在与该列表中,可使用 sys.path.append() 导入。
sys.modules: 是一个字典。所有加载到内存中的模块都存放在该字典中。当 import 一个模块的时候,首先会在这个字典中查找是否已经加载了目标模块。如果已加载,则将模块的名字加入到正在调用 import 的模块的 Local 命名空间(也就是< module >.__dict__)中。如果没有,则从 sys.path 查找,找到后载入内存,并加入到 sys.modules 字典,名称也将导入到当前模块的 Local 命名空间。
reference[[python]自问自答:python -m参数?](https://www.cnblogs.com/xuewe...
Python的-m参数
python中的import(涉及pkgutil和inspect包)
import 迷宫
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/41157.html
摘要:网上还查到一个方法是通过配置反向代理,我试了一个多小时然后放弃了。配置好反向代理之后,当用户访问页面时,服务器收到请求,将其转换为交给处理,并将处理出的结果返回,这样用户就看到了正确的页面。 最近开始学着用Python+Tornado+MongoDB写网站,兴起写了一个博客,觉得很有意思所以想挂在服务器上发布出去找大家一起玩。这个时候就遇到了问题。 服务器是windows系统,安装的...
摘要:系统安装部署环境教程第一安装依赖环境在准备安装框架部署之前,我们需要先安装依赖环境,因为可能默认的环境没有完善的最新部署包。检查最新版本的数据库,然后部署安装。到目前为止,我们已经成功的在环境中部署了应用程序,以及。 Django,是一款针对Python环境的WEB开发框架,能够帮助我们构架快捷、简单的WEB框架设置,Django框架非常适合开发内容应用环境,所以在本文中,麦子将整理基...
摘要:站真是个学习的地方,竟发现了杨老师的部署视频,杨老师的站主页在此主页有一系列的学习视频,推荐干货用于部署的项目主要用了提供后台,所以静态文件仅有部分的。接下来是部署和激活阶段了。 吐吐槽 此篇blog将详细记录部署Django的每一个步骤,网上现有的教程实在太少太老了!好多坑!第一次尝试后台很懵,最坑的地方是安装的wsgi部分模块需要更新。B站真是个学习的地方,竟发现了杨老师的部署视频...
摘要:站真是个学习的地方,竟发现了杨老师的部署视频,杨老师的站主页在此主页有一系列的学习视频,推荐干货用于部署的项目主要用了提供后台,所以静态文件仅有部分的。接下来是部署和激活阶段了。 吐吐槽 此篇blog将详细记录部署Django的每一个步骤,网上现有的教程实在太少太老了!好多坑!第一次尝试后台很懵,最坑的地方是安装的wsgi部分模块需要更新。B站真是个学习的地方,竟发现了杨老师的部署视频...
摘要:站真是个学习的地方,竟发现了杨老师的部署视频,杨老师的站主页在此主页有一系列的学习视频,推荐干货用于部署的项目主要用了提供后台,所以静态文件仅有部分的。接下来是部署和激活阶段了。 吐吐槽 此篇blog将详细记录部署Django的每一个步骤,网上现有的教程实在太少太老了!好多坑!第一次尝试后台很懵,最坑的地方是安装的wsgi部分模块需要更新。B站真是个学习的地方,竟发现了杨老师的部署视频...
阅读 3492·2021-11-23 10:13
阅读 862·2021-09-22 16:01
阅读 907·2021-09-09 09:33
阅读 629·2021-08-05 09:58
阅读 1715·2019-08-30 11:14
阅读 1932·2019-08-30 11:02
阅读 3263·2019-08-29 16:28
阅读 1476·2019-08-29 16:09