python解释器具有-m
模块 选项“将库模块 模块 作为脚本运行”。
使用此python代码a.py:
if __name__ == "__main__":
print __package__
print __name__
我测试python -m a
了
"" <-- Empty String
__main__
而python a.py
回报
None <-- None
__main__
对我来说,这两个调用似乎是相同的,只是当用-m选项调用__package__时不为None。
有趣的是,有了python -m runpy a
,我得到了与python -m a
编译成a.pyc的python模块相同的东西。
这些调用之间的(实际)区别是什么?它们之间有什么利弊?
同样,David Beazley的Python Essential Reference将其解释为“
-m选项将库模块作为脚本运行,并在执行主脚本之前在__main__模块内部执行 ”。这是什么意思?
当您使用-m
命令行标志时,Python将为您导入模块
或包 ,然后将其作为脚本运行。当您不使用该-m
标志时,您命名的文件 仅作为脚本 运行。
当您尝试运行软件包时,区别很重要。之间有很大的区别:
python foo/bar/baz.py
和
python -m foo.bar.baz
与后一种情况一样,foo.bar
将导入,并且相对导入将foo.bar
作为起点正确运行。
演示:
$ mkdir -p test/foo/bar
$ touch test/foo/__init__.py
$ touch test/foo/bar/__init__.py
$ cat << EOF > test/foo/bar/baz.py
> if __name__ == "__main__":
> print __package__
> print __name__
>
> EOF
$ PYTHONPATH=test python test/foo/bar/baz.py
None
__main__
$ PYTHONPATH=test python -m foo.bar.baz
foo.bar
__main__
结果,在使用-m
开关时,Python实际上必须关心软件包。普通脚本永远 不能 是软件包,因此__package__
将其设置为None
。
但运行一个封装或模块 内 与包裹-m
和现在至少存在 可能性 的封装的,所以__package__
变量设置为一个字符串值;
在上面的演示中,将其设置为'foo.bar'
,对于不在包内的普通模块,将其设置为空字符串。
至于__main__
模块
,Python会导入正在运行的脚本,就像导入常规模块一样。创建一个新的模块对象来保存全局名称空间,并将其存储在中sys.modules['__main__']
。这就是__name__
变量所指的,它是该结构中的关键。
对于包,您可以在其中创建一个__main__.py
模块,并在运行时运行该模块python -m package_name
;其实这是你的唯一途径
可以 运行包的脚本:
$ PYTHONPATH=test python -m foo.bar
python: No module named foo.bar.__main__; 'foo.bar' is a package and cannot be directly executed
$ cp test/foo/bar/baz.py test/foo/bar/__main__.py
$ PYTHONPATH=test python -m foo.bar
foo.bar
__main__
因此,在命名要与一起运行的包时-m
,Python会查找__main__
该包中包含的模块并将其作为脚本执行。然后,其名称仍设置为'__main__'
,并且模块对象仍存储在中sys.modules['__main__']
。
问题内容: python解释器具有 模块 选项“将库模块 模块 作为脚本运行”。 使用此python代码a.py: 我测试了 而回报 对我来说,这两个调用似乎是相同的,只是当用-m选项调用__package__时不为None。 有趣的是,有了,我得到了与编译成a.pyc的python模块相同的东西。 这些调用之间的(实际)区别是什么?它们之间有什么利弊? 同样,David Beazley的Pyth
问题内容: 为了从Java执行python脚本(具有几个命令行参数),我尝试使用的是以下Java代码 例如,我打算执行以下命令: 请注意,参数arg3采用参数值列表。 我面临的问题是我没有找到将值列表传递给参数arg3的方法。 如果有人可以给我一些提示以解决我的问题,我将不胜感激。 我已经进行了搜索,但是找不到适合我需要的答案,如果有人找到正确的链接,请告诉我。 最好! 问题答案: 只需将它们
我在这里学习选修课的教程-https://www.geeksforgeeks.org/java-8-optional-class/其中有以下几点 我正在尝试使用检查as减少行数 但无法进一步了解其他部分 有办法吗?
问题内容: 考虑到此代码,我是否可以绝对确定该块始终执行,无论它是什么? 问题答案: 是的,将在执行或代码块后调用。 唯一不会被调用的时间是: 如果你调用 如果你调用 如果JVM首先崩溃 如果JVM在或catch块中达到了无限循环(或其他不间断,不终止的语句) 操作系统是否强行终止了JVM进程;例如,在UNIX上 如果主机系统死机;例如,电源故障,硬件错误,操作系统崩溃等 如果该块将由守护程序线程
问题内容: Python 3等效于什么? 问题答案: 从文档: 该模块已合并到Python 3.0中。将源转换为3.0时,2to3工具将自动适应导入。 因此,您的命令是,或者取决于您的安装,它可以是:
本文向大家介绍使用PyV8在Python爬虫中执行js代码,包括了使用PyV8在Python爬虫中执行js代码的使用技巧和注意事项,需要的朋友参考一下 前言 可能很多人会觉得这是一个奇葩的需求,爬虫去好好的爬数据不就行了,解析js干嘛?吃饱了撑的? 搜索一下互联网上关于这个问题还真不少,但是大多数童鞋是因为自己的js基础太烂,要么是HTML基础烂,要么ajax基础烂,反正各方面都很烂。基础这么渣不