1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonのsys.pathとは?

Posted at

はじめに

開発をしているとよく目にするsys.pathについて、きちんと理解できていなかったので学習メモです。

sys.pathとは

Pythonはimport文を使ってモジュールを読み込みます。
その際、Pythonは「どのフォルダの中を探せばいいのか?」をリストで管理しています。
このリストがsys.pathです。

import sys
print(sys.path)

実行結果の例

['/Users/user/project',
 '/Users/user/.pyenv/versions/3.10/lib/python3.10',
 '/Users/user/.pyenv/versions/3.10/lib/python3.10/site-packages']

このようにPythonはsys.pathに書かれたフォルダの中からパッケージを探します。

sys.pathが作成・追記されるタイミング

1. Pythonの起動時

  • pythonコマンドで対話型シェルを起動時
  • Pythonファイルを実行時
  • python -m moduleでモジュールを実行時

pythonを起動すると自動的にsys.pathが作成され、以下のような情報を元にリストが作成されます。

  • スクリプトのあるディレクトリ(現在のディレクトリ)
  • 標準ライブラリのディレクトリ(例: /usr/lib/python3.10)
  • site-packagesのディレクトリ(インストールされたパッケージの保存場所)
  • (設定されている場合のみ)PYTHONPATH環境変数に指定されたディレクトリ

2. PYTHONPATH環境変数が設定されたとき

PYTHONPATH環境変数を設定すると、そのディレクトリもsys.pathに追加されます。

3. sys.path.append()で手動追加したとき

Pythonのスクリプト内でsys.path.appen()を使うと、指定したディレクトリがsys.pathに追加されます。 

import sys
sys.path.append("/path/to/custom/module")

sys.pathを確認するといいケース

1. NotModuleFoundエラーが発生したとき

import mymodule #ModuleNotFoundError

このようなエラーが発生したときは、sys.pathを確認し、対象モジュールのディレクトリがsys.pathに含まれているかチェックしましょう。

import sys
print(sys.path)

2. カスタムモジュールを正しくインポートできないとき

プロジェクトの独自モジュールをインポートしようとしたとき、sys.pathにそのディレクトリが含まれているか確認します。

3. パッケージのインストール後にimportできないとき

pip installしたはずのパッケージがimportできない場合、sys.pathsite-packagesのディレクトリが含まれているかを確認します。

import sys
print([p for p in sys.path if "site-packages" in p])
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?