如何将模块目录导入到Pythonpath,这是从子文件夹到原始源的符号链接?

我正在尝试运行docker容器child1和child2。 可以说我们有:

更新

|parent |-----|child1/ src_folder/ __init__.py mod1.py |-----|child2/ __init__.py symlink_target_folder mody.py test1_dir/ smfile.py 

我做了类似的事情

 ln -rs ~/parent/child1/src_folder ~/parent/child2/symlink_target_folder 

在mody.py当我这样做,

 from symlink_target_folder import mod1 

有用;

但从我test1_dir> smfile.py

 from .child2.symlink_target_folder import mod1 

它会抛出ImportError。

我想知道如何从该目录访问相同的模块? 可以将symlink_target_folder导出到PYTHONPATH中。 我已经做好了

export PYTHONPATH = $ PYTHONPATH:/ symlink_target_folder

这样`我可以从mody.py做到

 from symlink_target_folder.mod1 import SmFoo 

但我不认为它是由于PYTHONPATH。 只是symlink_target_folder和mody.py在同一个文件夹中。

我如何解决这个问题? 什么是解决这个问题的更好方法? 我确实检查了这一点

所以你有以下的树结果:

 . ├── child1 │  └── srcFolder │  ├── __init__.py │  ├── __init__.pyc │  ├── mod1.py │  └── mod1.pyc └── child2 ├── __init__.py ├── mody.py ├── symlink_target_folder -> ../child1/srcFolder └── test1_dir ├── __init__.py └── smFile.py 

如果您在smFile.py以下标题,则导入将会起作用:

 import sys import os sys.path.append(os.path.abspath(os.sep.join([".."]))) from symlink_target_folder import mod1 mod1.foo() 

除了使用符号链接,还可以使用这种方式添加path:

 sys.path.append(os.path.abspath(os.sep.join(["..", "..", "child1", "srcFolder"]))) 

以下是我如何解决这个问题;

特定

 |parent |-----|child1/ src_folder/ __init__.py mod1.py |-----|child2/ __init__.py symlink_target_folder mody.py test1_dir/ smfile.py 

我创buildsomepth.pth下有这样的somepth.pth文件:

symlink_target_folder

然后像这样的child2脚本下的simplepth.py:

 import site import os site.addsitedir(os.path.dirname(__file__)) 

当你运行child2> simplepth.py时,它会添加simplepth所在的目录以及任何自然指向/ child1 / srcFolder的.pth文件,并将其导入sys.path

现在你可以简单地做:

import mod1

这解决了我的问题。

所以如果你只想运行test1_dir / smFile.py你可以添加test1_dir的父目录,并将其添加到site.addsitedir,然后导入mod1,它将工作。