如何将模块目录导入到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,它将工作。