記事を書こうと思った経緯
自社のお仕事とは別に、某超大手企業様の中でもAI関連のシステムをよく開発してます。
もう今年に入って開発したものだけで、3つ?4つ?くらい作ってきました。
同じチームのメンバーに、熟年(熟練?)のデータサイエンティストの方がいて、よく開発の方針で揉めますw
課題
AIのレコメンドAPIを開発する中で、redis
や、datastore
など、必要なモジュールを共通utilsの中で使っています。
これに対し
熟年エンジニア:
データ整形や、ベクトル化する関数は使いたい。
それ以外のredis
関連やdatastore
関連のモジュールはインストールしていないからエラーが発生するため、ファイルを分けてほしい
私:
同じプロジェクトなんだから、pip install -r requirements.txt
やってくださいよ
熟年エンジニア:
私は使わないから、インストールしたくない
私:
「なんて協調性のない人なんだ・・・。。。。。」
という、理不尽な問題が発生しました
解決方法
import redis
def get_state(id):
redis = redis.Redis(host='localhost', port=6379, db=0)
return redis.get(id)
def get_vector(xxx):
...
これをget_vector
だけimportしてもエラーとなる。
def get_state(id):
import redis
redis = redis.Redis(host='localhost', port=6379, db=0)
return redis.get(id)
def get_vector(xxx):
...
と書くと、get_vector
だけimport可能になる。
フレームワークの中を覗いてると、たまにこの記述見かけますよね
相互参照の回避や、インストールしてない人対策などに使えるので、~~あまり必要ないかもしれませんが、~~頭の片隅に覚えておくと役に立つ時がくるかもしれません・・・・w