如何透明地重定向Python导入?

zil*_*n01 8 python python-import

我正在寻找一种方法来模拟Python导入的符号链接.我希望能够在不复制文件的情况下就地解压缩以下文件夹结构:

root
?? python_lib
?  ?? my_utils
?     ?? __init__.py
?     ?? etc.py
?? app1
?? app2
?? app3
   ?? lib
   ?  ?? __init__.py
   ?  ?? my_utils.py
   ?? run.py
Run Code Online (Sandbox Code Playgroud)

app3/run.py 包含这个:

from lib.my_utils import etc

etc.pancakes()
Run Code Online (Sandbox Code Playgroud)

我想要使​​用etc位于的代码python_lib/my_utils/.有什么我可以放入,app3/lib/my_utils.py以便Python> = 3.1将透明地导入python_lib/my_utils/文件夹(使用相对路径和..),子包也将工作?

Apa*_*ala 7

您必须在到达import语句之前执行某些操作app3/run.py.

import python_lib
import sys
sys.modules['lib'] = python_lib
# ...
from lib import etc
print etc.__file__
print dir(etc)
Run Code Online (Sandbox Code Playgroud)


Ela*_*fer 3

您应该将此路径添加到sys.path. 例如:

lib_path = os.path.abspath( os.path.split( os.getcwd()+"/"+sys.argv[0] )[0]+"/../_lib/my_utils/" )
sys.path.append(lib_path)
Run Code Online (Sandbox Code Playgroud)