Pycharmからのスクリプト実行で環境変数PATHを指定する

djangoアプリ内から、subprocessでシェルコマンドを動かしているところでOSErrorになっていた。

OSError: [Errno 2] No such file or directory

単純なスクリプトにするとこんな感じで、これでエラーが再現する。

# coding=utf-8
import subprocess
print subprocess.check_output(['convert', '--version'])

実行中の環境変数を調べてみると/usr/local/binにPATHが通って無かった。
もちろんシェルの環境変数には設定してあるけど、Pycharmから起動すると引き継がない。

import os
print os.environ["PATH"]
# /usr/bin:/bin:/usr/sbin:/sbin:/Users/yuhei/.virtualenvs/sandbox/bin

Run -> Edit Configurationから Environment variablesを設定できるのでこうしてみた

/usr/local/bin:$PATH

これで動いたけど、PATHを見てみると、$PATHがそのまま文字列として含まれていて、/usr/binにもパスが通らなくなってしまっている。

import os
print os.environ["PATH"]
# /usr/local/bin:$PATH:/Users/yuhei/.virtualenvs/sandbox/bin

とりあえず必要なPATHだけ指定しといた。

/usr/local/bin


import os
print os.environ["PATH"]
# /usr/local/bin:/Users/yuhei/.virtualenvs/sandbox/bin

djangoスクリプトをシェルから起動する場合は、シェルの環境変数で動作するので問題にはならない。