0

相対インポートに関する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__.pyexpkaffesys.pathfrom .tensorflow.network_shape import Network_Shape

すべての手順の後、同じエラーが発生します。

したがって、相対インポートに関するルールと、ファイルを適切に参照する方法を理解していません。これを行う方法と、そのようなインポートについて一般的に考える方法を理解するのに役立つポインターを本当に感謝します!

4

1 に答える 1