pycharmでpython+subprocessが上手く動かないときの対処方法


subprocessを使ってCLIコマンドを実行するpythonプログラムがterminal/コマンドプロンプトからは動くのにpycharmから実行すると動かない、という場合の対処方法をメモしておきます。

試行環境

Windows10
PyCharm2018.1.1 community edition
python3.6

起こったこと

CLIで動作するkaggle APIをpythonのsubprocessを使って操作するスクリプトを作成してpycharmで実行しようとしたんですがエラーが出て動きませんでした。

python
import subprocess

text = subprocess.check_output(['kaggle', 'competitions', 'list'], shell=True)
text = text.decode('cp932')
print(text)
pycharmで実行した結果
'kaggle' �́A�����R}���h�܂��͊O���R}���hA
����”\ȃv���O�����܂��̓ob�` t@C���Ƃ��ĔF������Ă��܂���B
Traceback (most recent call last):
  File "E:/python/code/test2.py", line 3, in <module>
    text = subprocess.check_output(['kaggle', 'competitions', 'list'], shell=True)
  File "E:\Anaconda3\envs\tf\lib\subprocess.py", line 356, in check_output
    **kwargs).stdout
  File "E:\Anaconda3\envs\tf\lib\subprocess.py", line 438, in run
    output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['kaggle', 'competitions', 'list']' returned non-zero exit status 1.

Process finished with exit code 1

ところがコマンドプロンプトから実行すると正常に動きます。

コマンドプロンプトで実行した結果
ref                                            deadline             category            reward  teamCount  userHasEntered  
---------------------------------------------  -------------------  ---------------  ---------  ---------  --------------  
digit-recognizer                               2030-01-01 00:00:00  Getting Started  Knowledge       2526            True  
titanic                                        2030-01-01 00:00:00  Getting Started  Knowledge      12367            True  
house-prices-advanced-regression-techniques    2030-01-01 00:00:00  Getting Started  Knowledge       4798           False  
imagenet-object-localization-challenge         2029-12-31 07:00:00  Research         Knowledge         55           False  
competitive-data-science-predict-future-sales  2019-12-31 23:59:00  Playground           Kudos       4488            True  
ashrae-energy-prediction                       2019-12-19 23:59:00  Featured           $25,000        365           False  
Kannada-MNIST                                  2019-12-17 23:59:00  Playground       Knowledge        403           False  

何が問題だったか

pycharmのシェルから実行したいファイルにPATHが通っていないのが原因でした。

コマンドプロンプトからconda activateコマンドで環境を有効にすると使いたい環境にPATHが通るんですが、pycharmはPATHを通すのではなくて直接python.exeを実行するので同じ仮想環境を使っていてもPATHは通っていません。

対処方法

Pycharm → Run → Edit Configuration → Environment variableと入っていって、PATHに実行したい環境と同じPATHを記入します。実行したい環境のPATHは以下で確認できます。

コマンドプロンプト
echo %path%


結果

Pycharmで実行した結果
ref                                            deadline             category            reward  teamCount  userHasEntered  
---------------------------------------------  -------------------  ---------------  ---------  ---------  --------------  
digit-recognizer                               2030-01-01 00:00:00  Getting Started  Knowledge       2526            True  
titanic                                        2030-01-01 00:00:00  Getting Started  Knowledge      12367            True  
house-prices-advanced-regression-techniques    2030-01-01 00:00:00  Getting Started  Knowledge       4798           False  
imagenet-object-localization-challenge         2029-12-31 07:00:00  Research         Knowledge         55           False  
competitive-data-science-predict-future-sales  2019-12-31 23:59:00  Playground           Kudos       4488            True  
ashrae-energy-prediction                       2019-12-19 23:59:00  Featured           $25,000        365           False  
Kannada-MNIST                                  2019-12-17 23:59:00  Playground       Knowledge        403           False  

やったね!