什么是导致“死亡”的机制;谷歌";要在python 2.7中导入的模块

什么是导致“死亡”的机制;谷歌";要在python 2.7中导入的模块,python,Python,这是MacOS上的python 2.7 下面是我的testcase文件mytest.py: import sys print sys.modules.keys() 我以python-smytest.py运行 输出为: ['google'、'copy_reg'、'sre_compile'、'u sre'、'encodings'、'site'、'uu builtin_uuu'、'sysconfig'、'uu main_uuuuu'、'encodings.encodings'、'abc'、'posi

这是MacOS上的python 2.7

下面是我的testcase文件mytest.py:

import sys
print sys.modules.keys()
我以python-smytest.py运行

输出为:
['google'、'copy_reg'、'sre_compile'、'u sre'、'encodings'、'site'、'uu builtin_uuu'、'sysconfig'、'uu main_uuuuu'、'encodings.encodings'、'abc'、'posixpath'、'u weakrefset'、'errno'、'google.logging'、'encodings'、'sre_u常量'、're'、'u abcoll'、'types'、's'、'uu编解码器'、'uu builtin'、'uu编解码器'、'uu、警告'、'generiicpath'、's'、's'、'igdata、warnings、UserDict、ENCOODINGS.utf_8、sys、osx支持、编解码器、os.path、语言环境、信号、回溯、LINECHACHE、posix、ENCOODINGS.ALIAES、exceptions、sre_parse、os、weakref]

我相信google是通过自动导入的site.py处理的.pth文件导入的,但我的理解是-s开关会抑制自动导入site.py


是什么导致“google”被导入?

您希望Capital
-S
排除
site.py
模块

此外,如果您在启用详细模式的情况下运行Python,它会为每个导入到stderr打印调试信息:

$python-S-v-c“通过”
#安装zipimport挂钩
进口zipimport#内置
#已安装的zipimport挂钩
导入编码#目录/usr/lib/python2.7/encodings
#/usr/lib/python2.7/encodings/_init__.pyc matches/usr/lib/python2.7/encodings/_init__.py
导入编码#从/usr/lib/python2.7/encodings/_init__.pyc预编译
#/usr/lib/python2.7/codecs.pyc matches/usr/lib/python2.7/codecs.py
导入编解码器#从/usr/lib/python2.7/codecs.pyc预编译
导入"编解码器"内置
...
在该模块中搜索
google
模块,位置和顺序的组合可能会给出提示。

根据(在终端中键入
python-h
时也可见):

-s

不要将添加到。
版本2.6中新增。
另请参见-每用户站点软件包目录

-S

禁用模块的导入及其所需的站点相关操作

您通过了-s(小写),而不是-s(大写),因此site.py仍然在启动时执行(以及导入google的.pth文件)

要修复它,请将正确的参数传递给解释器:

python-S mytest.py

问得好。我很想使用系统调用跟踪工具(传统上MacOS有dtrace,但如果不禁用某些安全功能,现在可能很难启动AIUI)查看参考资料。这并不是苹果Python安装中的开箱即用,也不是在我本地的Catalina上发生的。注意,-s和-s(大写)之间有区别当涉及Python参数时。您想要的行为可以通过
Python-S mytest.py
实现。请告诉我它是否可以这样工作。@Alan,我从一开始就没有否决过这一点。小心不要假设在时间上发生在彼此附近的事情来自同一个人。@CristiFati-这就是答案。但肯定是这样在“我的浏览器”中的文档中使用小写字母s来跟踪导入的来源,您可以尝试使用Python的
-v
标志,这将使它打印出它所做的所有导入。