python的-S选项由文档定义为“禁用模块站点的导入以及它所需的sys.path的依赖于站点的操作”。我发现当我使用这个选项时,我机器上的python启动速度是其两倍多,有时多更多。例如,在一台(慢)机器上:
$ time python -c 'print "hello"'
hello
python -c 'print "hello"' 0.14s user 0.03s system 85% cpu 0.204 total
$ time python -Sc 'print "hello"'
hello
python -Sc 'print "hello"' 0.02s user 0.01s system 73% cpu 0.038 total
这是5.3倍的加速。它似乎工作正常,至少我尝试过的脚本。使用它有什么缺点?
答案 0 :(得分:8)
这可能不是一个好主意。除此之外,这意味着site-packages目录不会被添加到路径中,因此您将无法导入除标准lib模块之外的任何内容:
python -Sc "import numpy"
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named numpy
您可以自己查看site.py
,看看它在做什么。它只是常规库目录中的一个模块。至少在我的系统上,看起来它有四个主要内容:
quit
和help
)如上所述,第一个可能是最关键的。第二个对于执行字符串I / O非常重要,具体取决于系统的区域设置(例如,如果未正确设置默认编码,则可能会出错)。第三个可能不那么重要。如果您希望进行每用户路径自定义(让用户拥有自己的个人库目录等),那么最后一个可能很重要。
答案 1 :(得分:3)
-S
标志执行以下操作:
不要在初始化时暗示'导入网站'
这意味着在初始化Python期间不会导入模块site。简要说明是此模块“将特定于站点的路径附加到模块搜索路径并添加一些内置”。没有完成所有这些工作确实会使启动更快。
使用文档作为指南,-S
标志会产生:
sys.path
未添加任何其他模块。您可以通过启动python
和python -S
并在import sys; print sys.path
中执行以下操作来比较差异。许多模块将无法使用,因此您将无法导入它们。sitecustomize
的模块中定义。)usercustomize
的模块中定义。)您的问题的简短答案是:是的,它使Python启动更快,但许多模块和自定义代码将不可用或不可能。
如果您主要导入自己的模块并编写自己的计算/代码,那么-S
标志就可以了。但是,如果您安装了在不同位置安装模块的Python安装,那么您将无法将它们与-S
标志一起使用。
答案 2 :(得分:2)
执行此操作时,您将丢失大部分模块搜索路径:
$ python -S
Python 2.6.8 (unknown, Apr 19 2012, 01:24:00)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
>>> import sys
>>> len(sys.path)
9
$ python
Python 2.6.8 (unknown, Apr 19 2012, 01:24:00)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> len(sys.path)
26
根据您的系统,这会对可用的模块产生重大影响。
其他可能破坏的东西是语言环境(由site.py设置为系统默认值),在Windows上,某些编解码器将不可用(它们由site.py别名)。