Edited at

cloud9でpython3を使うための下準備


きっかけ

意外と適当にやってもうまくいってたので気にしなかったけど

デバグモードだとプライベートモジュールをインポートに失敗するなどして

いよいよ無理がたたってきたのでメモ残す。


1.pythonと実行したらpython3.6を実行できるようにする

今まで

$ python hogehoge.py

と実行すると、python2.7で実行してしまう状況だったので

$ python3 hogehoge.py

としてきたが、これが不便なので改める。


やり方

①.bashrcを起動する

$ vi ~/.bashrc 

②aliasをpython3に修正して保存


.bashrc(before)

# User specific aliases and functions

alias python=python27


.bashrc(after)

# User specific aliases and functions

alias python=python36

③.bashrcを即時反映させる

source ~/.bashrc

④pythonのバージョンを確認する

python -V

Python 3.6.8

これでOK。


2.PYTHONPATHを追加する

プライベートモジュールをinportしてデバグをするにはPYTHONPATHを通しておく必要あるそうだ。

 参考:https://teratail.com/questions/190555

ポイントは、ワークスペースのところまでPATHを通す必要があるということ。

ちょっとわかりにくいので実例で行くと。。。

「deep-learning-from-scratch」プロジェクトにある、

dataset > mnist.pyの関数load_mnist()をimportしたい場合。

ソースコード上は↓↓のような書き方になるとする。


3.6.2.neuralnet_mnist.py

from dataset.mnist import load_mnist


実際の位置関係は、キャプチャ画面で表すとこんな感じの状況。

コメント 2019-07-17 152140.png

特に策もなく、デバッグモードで実行しようとしても

↓↓みたいな感じでModuleNotFoundErrorエラーという形で悲しい扱いを受ける。。。

コメント 2019-07-17 152606.png

そこでPYTHONPATHを設定してやって、プライベートモジュールの場所を

指示してやればよい、という話。


やり方

①前準備(現在のPYTHONPATHの状況を確認)

軽く↓↓のようなコード作って実行してやると現在の状況を出力してくれる


check_pythonPath.py

import sys

import pprint

pprint.pprint(sys.path)



実行結果

$ python check_pythonPath.py

['/home/ec2-user/environment/deep-learning-from-scratch/ch01', ← check_pythonPath.pyを実行したディレクトリ位置
'/usr/lib64/python3.6',
'/usr/lib64/python3.6/lib-dynload',
'/home/ec2-user/.local/lib/python3.6/site-packages',
'/usr/local/lib64/python3.6/site-packages',
'/usr/local/lib/python3.6/site-packages',
'/usr/lib64/python3.6/dist-packages',
'/usr/lib/python3.6/dist-packages']

②.bashrcにPYTHONPATHの設定を追加、即時反映

どこでもいいと思うけど、個人的な趣味でPATHの近くに追記することにした

 ※コマンドは前述のため割愛

export PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PYTHONPATH=/home/ec2-user/environment/deep-learning-from-scratch/ ←PATHの下に追記した

③PYTHONPATHの反映状況を確認


実行結果

$ python check_pythonPath.py

['/home/ec2-user/environment/deep-learning-from-scratch/ch01',
'/home/ec2-user/environment/deep-learning-from-scratch',    ←増えた!
'/usr/lib64/python3.6',
'/usr/lib64/python3.6/lib-dynload',
'/home/ec2-user/.local/lib/python3.6/site-packages',
'/usr/local/lib64/python3.6/site-packages',
'/usr/local/lib/python3.6/site-packages',
'/usr/lib64/python3.6/dist-packages',
'/usr/lib/python3.6/dist-packages']


おわりに

またなんか必要な準備がでてきたらここに追記していこうかなと。

~つづく~