你能告诉我调用之间的区别吗?
python -m mymod1 mymod2.py args
Run Code Online (Sandbox Code Playgroud)
和
python mymod1.py mymod2.py args
Run Code Online (Sandbox Code Playgroud)
看来在这两种情况下mymod1.py被调用,sys.argv是
['mymod1.py', 'mymod2.py', 'args']
Run Code Online (Sandbox Code Playgroud)
那么-m切换是什么?
python解释器具有-m 模块选项"将库模块模块作为脚本运行".
使用此python代码a.py:
if __name__ == "__main__":
print __package__
print __name__
Run Code Online (Sandbox Code Playgroud)
我测试python -m a得到了
"" <-- Empty String
__main__
Run Code Online (Sandbox Code Playgroud)
而python a.py回报
None <-- None
__main__
Run Code Online (Sandbox Code Playgroud)
对我来说,这两个调用似乎是相同的,除非__package__在使用-m选项调用时不是None.
有趣的是,python -m runpy a我得到了与python -m a编译的python模块相同的a.pyc.
这些调用之间的(实际)区别是什么?他们之间有什么利弊?
此外,David Beazley的Python Essential Reference将其解释为"-m选项将库模块作为脚本运行,该脚本在执行主脚本之前在__main__模块内执行".这是什么意思?
我有一个本地版本的Python 3.4.1,我可以运行python -m pip install,但我无法找到要运行的pip二进制文件pip install.这两者有什么区别?
关于此主题的堆栈溢出已经有两个帖子; 但是,他们都没有解决或解决我的具体情况.
我已经安装了pytest via pip install pytest.我也能用Python导入库.
问题是,当我尝试py.test在终端中使用该命令时,我得到了py.test: command not found.
有没有人知道为什么我无法在终端中使用该命令?
编辑:它甚至显示为已安装的包:
$ pip list
cycler (0.9.0)
matplotlib (1.5.1)
numpy (1.10.1)
pip (8.1.0)
py (1.4.31)
pyparsing (2.0.7)
pytest (2.9.0)
python-dateutil (2.4.2)
pytz (2015.7)
scipy (0.17.0)
setuptools (7.0)
six (1.10.0)
tensorflow (0.5.0)
vboxapi (1.0)
wheel (0.26.0)
Run Code Online (Sandbox Code Playgroud)