相対インポートに関するSOの質問がたくさんあることを理解しています。そこに解決策を試した範囲を記録しますが、それでも問題を解決できません。
次のディレクトリ構造があります。設計上は私のものではありませんが、必要に応じて変更するためのゲームです(フォークされたレポ)。
exp
main_Exp.py
kaffe
__init__.py
tensorflow
__init__.py
network_shape.py
ResNet
__init__.py (*)
ThreeDMM_shape.py
このレポでモデルを実行するには、使用します
python main_Exp.py input_file.csv
内部main_Exp.py
:
sys.path.append('./kaffe')
sys.path.append('./ResNet')
from ThreeDMM_shape import ResNet_101 as resnet101_shape
from ThreeDMM_expr import ResNet_101 as resnet101_expr
内部ResNet/ThreeDMM_shape.py
:
sys.path.append('/home/usc/Desktop/Research/FG18/ExpNet_Code_Release/kaffe/tensorflow')
from network_shape import Network_Shape
わかりました。明らかに、このハードコードされた絶対パスを変更する必要があります。これらのファイルをたまたまインストールした自分の特定のパスを使用せずに、正しい方法で実行したいと思います。
だから私は試します
from ..kaffee.tensorflow import Network_Shape
>>> ValueError: Attempted relative import in non-package
(1)フォルダー__init__.py
にファイルを追加しました ( で表示) (2) ファイルをモジュールとして実行してみました:
(3)最上位フォルダー ( ) にも追加しようとしましたが、ナンセンスだと思います。(4)に追加されたパスを使用して最初のインポートが行われたことを考えると、インポートを次のように変更してみました。ResNet
(*)
python -m main_Exp input_file.csv
__init__.py
exp
kaffe
sys.path
from .tensorflow.network_shape import Network_Shape
すべての手順の後、同じエラーが発生します。
したがって、相対インポートに関するルールと、ファイルを適切に参照する方法を理解していません。これを行う方法と、そのようなインポートについて一般的に考える方法を理解するのに役立つポインターを本当に感謝します!