如何将包含模块的目录导入到 Python 路径,该路径是从子文件夹到原始源的符号链接?
How to import a directory with modules to Python path that is a symlink to original source from a subfolder?
我正在尝试 运行 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 以某种方式解决。
我做了
导出 PYTHONPATH=$PYTHONPATH:/symlink_target_folder
这样`
我可以从 mody.py
from symlink_target_folder.mod1 import SmFoo
但我认为这不是 PYTHONPATH 造成的。只是 symlink_target_folder 和 mody.py 在同一个文件夹中。
我该如何解决这个问题?
解决这个问题的更好方法是什么?
我做到了 check this out
所以你有以下树结果:
.
├── 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()
除了使用符号 link,您还可以使用该方式添加路径:
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
我在 child2 文件下创建了 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 就可以了。
我正在尝试 运行 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 以某种方式解决。 我做了
导出 PYTHONPATH=$PYTHONPATH:/symlink_target_folder
这样` 我可以从 mody.py
from symlink_target_folder.mod1 import SmFoo
但我认为这不是 PYTHONPATH 造成的。只是 symlink_target_folder 和 mody.py 在同一个文件夹中。
我该如何解决这个问题? 解决这个问题的更好方法是什么? 我做到了 check this out
所以你有以下树结果:
.
├── 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()
除了使用符号 link,您还可以使用该方式添加路径:
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
我在 child2 文件下创建了 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 就可以了。