15

Pythonの-Sオプションは、ドキュメントで「モジュールサイトのインポートとそれに伴うsys.pathのサイト依存の操作を無効にする」と定義されています。このオプションを使用すると、マシンでのPythonの起動が2倍以上、場合によってははるかに高速になることがわかりました。たとえば、1台の(遅い)マシンでは、次のようになります。

$ 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倍のスピードアップです。そして、少なくとも私が試したスクリプトでは、問題なく動作しているようです。それを使用することの欠点は何ですか?

4

3 に答える 3

9

それはおそらく良い考えではありません。とりわけ、これは 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自分自身を見て、それが何をしているのかを見ることができます。これは、通常のライブラリ ディレクトリにある単なるモジュールです。少なくとも私のシステムでは、主に次の 4 つのことを行っているようです。

  • サイト パッケージ パスを設定する
  • デフォルトのエンコーディングを設定します
  • インタラクティブな使用のためのいくつかのヘルパー関数を定義します (quitおよびhelp)
  • ユーザー固有のサイトのカスタマイズを設定する

前述のように、最初のものはおそらく最も重要です。2 番目は、システムのロケール設定によっては、文字列 I/O を行うのに重要な場合があります (つまり、デフォルトのエンコーディングが正しく設定されていない場合、エラーが発生する可能性があります)。3つ目はおそらくそれほど重要ではありません。ユーザーごとのパスのカスタマイズが必要な場合 (ユーザーに独自の個人用ライブラリ ディレクトリを持たせるなど)、最後のオプションが重要になる可能性があります。

于 2012-07-03T19:57:00.027 に答える
3

-Sフラグは次のことを行います。

初期化時に「インポート サイト」を意味しない

これは、Python の初期化中にモジュールサイトがインポートされないことを意味します。簡単な説明は、このモジュールが「モジュール検索パスにサイト固有のパスを追加し、いくつかのビルトインを追加する」ということです。このすべての作業を行わなくても、実際に起動が速くなります。

ドキュメントをガイドとして使用すると、-Sフラグは次のようになります。

  • に追加されたモジュールはありませんsys.path。両方で次の操作を開始pythonして実行することで、違いを比較できます。多くのモジュールは利用できないため、インポートできません。python -Simport sys; print sys.path
  • カスタム サイト初期化コードは実行されません (これは というモジュールで定義できますsitecustomize)。
  • カスタム初期化コードは実行されません (これは というモジュールで定義できますusercustomize)。

あなたの質問に対する簡単な答えは次のとおりです。はい、Python の起動が速くなりますが、多くのモジュールとカスタマイズ コードが利用できないか、可能ではありません。

主に独自のモジュールをインポートし、独自の計算/コードを記述する場合、-Sフラグは問題ありません。-Sただし、モジュールが別の場所にインストールされている Python インストールがある場合は、それらをフラグで使用することはできません。

于 2012-07-03T19:58:13.457 に答える
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 によってエイリアス化されます)。

于 2012-07-03T19:57:10.817 に答える