使用python的选项安全吗?

2024-04-24 22:41:04 发布

您现在位置:Python中文网/ 问答频道 /正文

python的-S选项被文档定义为“禁用模块站点的导入和对系统路径我发现当我使用这个选项时,在我的机器上启动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倍的加速。而且看起来效果不错,至少用我试过的剧本。使用它有什么缺点?在


Tags: 模块文档路径机器hello定义time站点
3条回答

这可能不是个好主意。除此之外,这意味着不会将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,看看它在做什么。它只是普通库目录中的一个模块。至少在我的系统中,它看起来有四个主要功能:

  • 设置站点包路径
  • 设置默认编码
  • 定义几个用于交互使用的助手函数(quithelp
  • 设置用户特定的站点自定义

如前所述,第一个可能是最关键的。第二种方法对于执行字符串I/O非常重要,这取决于系统的区域设置(即,如果默认编码设置不正确,则可能会出错)。第三个可能不那么重要。最后一个可能很重要,如果你想定制每个用户的路径(让用户有自己的个人库目录,等等)。在

执行此操作时,将丢失模块搜索路径的一大块:

$ 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

根据您的系统,这可能会对可用的模块产生重大影响。在

其他可能中断的是语言环境(设置为系统默认值站点.py)而且,在windows上,有些编解码器将不可用(它们的别名是站点.py). 在

-S标志执行以下操作:

don't imply 'import site' on initialization

这意味着模块site不会在Python初始化期间导入。一个简单的描述是,这个模块“将把站点特定的路径附加到模块搜索路径中,并添加一些内置的“”。不做所有这些工作确实会使创业更快。在

以文档为指导,-S标志将导致:

  • 没有向sys.path添加其他模块。您可以通过启动pythonpython -S并在两个import sys; print sys.path中执行以下操作来比较差异。许多模块将不可用,因此您将无法导入它们。在
  • 自定义站点初始化代码不会运行(这可以在名为sitecustomize的模块中定义)。在
  • 自定义初始化代码不会运行(这可以在名为usercustomize的模块中定义)。在

对您的问题的简短回答是:是的,它使Python更快地启动,但是许多模块和定制代码将不可用或不可能。在

如果您主要导入自己的模块并编写自己的计算/代码,那么-S标志就可以了。但是,如果在不同的地方安装了Python模块,那么就不能使用带有-S标志的模块。在

相关问题 更多 >