LoginSignup
5
4

More than 3 years have passed since last update.

Pythonでどうしてもsettings.iniを読み込めないエラーが生じた

Posted at

この記事の内容

あるPCで動いていたコードが違うPCで動かないことがありました。
原因は相対パスを上手く読み込んでいないことが原因のようでしたので、備忘として解決策を記載します。
なお、現時点で解決策がうまくいく理由がわからないため、理解ができた段階で記事を更新する予定です。

目次

1.背景
2.事象の整理
3.解決策
4.解決策が上手くいく理由

1. 背景

とある簡単なアプリケーション作成のために書いたコードが1,000行超え始めたところから、1ページのpythonファイルにコードを書くことに限界を感じ始めましたので、処理
を分割し、複数のpythonファイルに分けて管理をすることとしました。
ログイン情報等の初期値についてはsettings.iniファイルを作成し、settings.pyからconfigparserを使って読み込むこととしました。
また、アップデート管理をするためにgithubも先日使い始めました。
初めてのことが重なり、わからないこともたくさん出てきたので備忘として記録を残します。

2. 事象の整理

メインPCで作成したRepositoryをgitからサブPCにクローンを作成したときに、なぜかうまくいかない箇所がいくつかありました。
特に理由がわからなかったのが、相対パスで参照していたsettings.inisettings.pyから読み込めない点でした。

メインPCでは下記のコードで問題なく動いていました。

settings.py

import configparser

conf = configparser.ConfigParser()
conf.read('./settings.ini')

# プロファイルパス
PROFILE_PATH = conf['driver']['PROFILE_PATH']

# saleceforce
Saleceforce_ID = conf['saleceforce']['Saleceforce_ID']
Saleceforce_PASS = conf['saleceforce']['Saleceforce_PASS']
Saleceforce_ADDRESS = conf['saleceforce']['Saleceforce_ADDRESS']

しかし、これをサブPCで動かすと下記のエラーが生じます。どうやら'./settings.ini'をうまく読み込めていないということがわかりました。

raise KeyError(key)
KeyError: 'driver'

3. 解決策

こちらについては下記のように書き直してやるとうまくいきます。

settings.py
import configparser
import os

conf = configparser.ConfigParser()
path = os.path.join(os.path.dirname(__file__), 'settings.ini')
conf.read(path, 'UTF-8')

# プロファイルパス
PROFILE_PATH = conf['driver']['PROFILE_PATH']

# saleceforce
Saleceforce_ID = conf['saleceforce']['Saleceforce_ID']
Saleceforce_PASS = conf['saleceforce']['Saleceforce_PASS']
Saleceforce_ADDRESS = conf['saleceforce']['Saleceforce_ADDRESS']

相対パスだとうまく読み込めないので、実行ファイルのディレクトリをos.path.dirname(__file__)で読み込んで直接指定してやると上手くいきました。
違う環境でコードを実行するときはこっちのほうがいいのかもしれないです。

4. 解決策が上手くいく理由

理由がわかりません。
自分の中で理解ができたら更新します。

5
4
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
5
4