sys.path
は、Pythonがインポートするモジュールを検索するパスのリストですが、コマンドラインから起動するスクリプトの指定方法によりsys.path
の最初の要素が変わります。
例えば、カレントディレクトリ/home/user1
に、test.py
とPython packageディレクトリtest
があるとします。
test.py
test/
__init__.py
__main__.py
test.py
とtest/__main__.py
には、sys.pathを出力する下記のコードが入っています。(Python3)
import sys
print(sys.path)
まず、スクリプトファイルをコマンドライン引数としてPythonを起動した場合、sys.path[0]
は、そのスクリプトがあるディレクトリがセットされます。
$ python test.py
['/home/user1', ...]
-m
オプションで実行するモジュール(パッケージ)を指定した場合、sys.path[0]
は、空白列''
がセットされます。これはカレントディレクトリと解釈されます。
$ python -m test
['', ...]
引数無しで、Interactive modeでPythonを起動した場合や、-c
オプションで実行するコードを与えた場合も、同様にsys.path[0]
には、空白列''
がセットされます。
$ python
>>> import sys; print(sys.path)
['', ...]
$ python -c "import sys; print(sys.path)"
['', ...]
__main__.py
を含むディレクトリを実行するスクリプトに指定した場合、sys.path[0]
は、そのディレクトリの名前がセットされます。
$ python test
['test', ...]
参考