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

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 が同じフォルダーにあるだけです。

これを解決するにはどうすればよいですか?この問題にアプローチするより良い方法は何でしょうか? 私はこれをチェックしました

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 に答える