1

我正在尝试运行 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

在 mod.py 做的时候,

from symlink_target_folder import mod1

有用;

但是当我这样做时来自 test1_dir>smfile.py

from .child2.symlink_target_folder import mod1

它会抛出 ImportError。

我想知道如何从该目录访问同一个模块?可以将 symlink_target_folder 导出到 PYTHONPATH 以某种方式解决。我已经做好了

导出 PYTHONPATH=$PYTHONPATH:/symlink_target_folder

这样`我可以从mody.py做

from symlink_target_folder.mod1 import SmFoo

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

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

4

2 回答 2

2

所以你有以下树结果:

.
├── 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()

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

sys.path.append(os.path.abspath(os.sep.join(["..", "..", "child1", "srcFolder"])))
于 2015-04-03T14:15:40.633 回答
1

这是我解决这个问题的方法;

给定

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

somepth.pth在 child2 文件下创建了这个文件:

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 它将起作用。

于 2015-04-09T13:44:00.763 回答