我知道有很多关于相对进口的问题。我将记录我在其中尝试解决方案的程度,但我仍然无法解决我的问题。
我有以下目录结构。这不是我的设计,但我喜欢根据需要修改东西(分叉回购)。
exp
main_Exp.py
kaffe
__init__.py
tensorflow
__init__.py
network_shape.py
ResNet
__init__.py (*)
ThreeDMM_shape.py
要在这个 repo 中运行模型,我将使用
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
了文件(用 (4) 鉴于第一次导入是使用附加到的路径进行的,我尝试将导入更改为ResNet
(*)
python -m main_Exp input_file.csv
__init__.py
exp
kaffe
sys.path
from .tensorflow.network_shape import Network_Shape
所有步骤后出现同样的错误。
所以我不了解相对导入的规则以及如何以理智的方式引用文件。我真的很感激一个指针,它可以帮助我理解如何做到这一点,以及如何考虑一般的此类导入!