Learning 1 documentation

sys

«  subprocess   ::   Contents   ::   tarfile  »

sys

sys.platform

コマンド uname と同じ結果を返します。

sys.pathについて

importライブラリのパスが入っています。

-Sをつけると、実行時にsiteモジュールは読み込まれません

python -c "import requests"  #ok
python -Sc "import os"  #ok
python -Sc "import requests"  #error!

ちょっと site.addsitedirについて分らないことがあったのでメモ。 Python起動時にsiteモジュールは自動的にインポートされる。(-S をつけるとインポートしない) site-packages自体とその直下の.pthファイルに書いてあるモジュールをsys.pathに追加する。

後から、「/hoge/my-lib/複数のモジュール」にPATHを通す必要があるとき sys.path.insert(0, ‘/hoge/my-lib’)

だと上手くいかない。なぜならモジュールの多くは my-lib/ hoge-2.1.1//hoge /__init__.py /hogemodule1.py

のような構成になっているので、my-lib直下に__init__.pyが無いためにPythonがその下のモジュールを見つけられないためだ。

どうしても、sys.pathを使う場合は

import sys
import os

sys.path.insert(0, os.path.join('/hoge/my-lib/hoge-2.1.1'))
sys.path.insert(0, os.path.join('/hoge/my-lib/fuga-2.2.1'))
sys.path.insert(0, os.path.join('/hoge/my-lib/hum-1.1.3'))

のように一つ一つのモジュールを指定してあげる必要がある。

しかし、それだと非常に面倒なので/hoge/my-lib/mypackage.pthのような.pthファイルに hoge-2.1.1 huga-2.2.1 hum-1.1.3

とテキストファイルを用意し from site import addsitedir

addsitedir(‘/hoge/my-lib’)

と、してあげると.pthファイルに書いてあるモジュールを一つ一つにPATHを通してくれる。

importできるモジュールを一覧 sys.modules

エラー強制終了 sys.exit(1)

  • sys.path
  • byteorder
  • sys.argv
python *.py
と
./*.py
では、argv[0]にパスが入るかどうかが異なる

«  subprocess   ::   Contents   ::   tarfile  »

inserted by FC2 system