pythonで違う階層の自作ライブラリをインポートする方法

プログラムプログラミング
スポンサーリンク

pythonでつまずいたら記事にするシリーズで、今回は自作ライブラリを作成したものの、うまくimportできなかったので忘備録として書きました。

スポンサーリンク

自作のライブラリを開発環境によらずにインポートしたい

プログラム

自作ライブラリをインポートする際、いわゆる「パスが通っているか」問題が発生しますよね。何らかの開発環境を使えばおそらく割と簡単でしょう。

自分はPyCharmを使っているので、開発環境で実施している範囲内ではとても簡単にインポートできました。設定でフォルダを選んでおけば、何の工夫もなく、importすれば読み込んでくれますからね。

PyCharm:JetBrainsによるプロ開発者様向けPython IDE
インテリジェントなコード補完、オンザフライのエラーチェックとクイックフィックスなどを備えたPython&Django用のIDE

でもそれだと環境依存してしまうので、いつ何時も読み込めるようにしておきたいのが人情。調べたものの、あっさりとつまづいたので自分の成功例を書いておきました。

開発環境

macbook pro : Catalina

階層の違うライブラリをインポートする

実行するpythonファイルと同じ階層にライブラリフォルダを置いた場合、話は簡単でかつ楽ちんです。

階層:
folder
┣ python.py
┗ my_library
┗ library.py
インポート:
from my_library import library

ですが階層が違う場合話は異なります。今回インポートしたい階層構造は以下。

階層:
┣ folder
┃ ┗ python.py
┗ my_library
┗ library.py

出るんですよねーエラー。

ValueError: Attempted relative import in non-packageの対処方法

で早速タイトルのエラーが出るわけです。で、ググるわけです。

一番上にこのサイトが出てきて、ダメな理由をとても丁寧に教えてくれます。どうもセキュリティの関係上、上の階層にいくことはできないみたい。

なのでmy_libraryへのパスを通す必要があるんですが、macやwindowsとしてパスを通すのは何となく嫌。嫌というかめんどくさい。PC変えるごとに設定し直さなくちゃならないし。

だからファイルへの書き方を書いてくれているんですがどうもうまく動かない。何ででしょう。でもやらなくちゃならないことは、上の階層へパスを通すことなので、以下のように記述したらうまく読み込むことができました!

import sys
sys.path.append(‘../’)
from my_library import library

まとめ

何でうまく行ってないのかちょっと理解できていませんが、やるべきことと別の手法は成功しました。誰かの助けになれば。

コメント

タイトルとURLをコピーしました