从Python中的父目录导入模块的可移植方法



我知道这是一个过时的话题,但python中的导入机制/s仍然让大众感到困惑。我想要的是能够导入父目录中的自定义模块,使我能够将项目带到另一个环境中,并使所有导入工作正常。例如这样的结构:

repo 
|--- folder1
|       |--- script1.py
|--- folder2       
|       |--- script2.py 
|--- utils
|--- some-util.py

如何在script1script2中从some-util.py导入?我的想法是,我可以将repo克隆到远程主机中,并从文件夹1和2中运行脚本,这些文件夹可能具有some-util.py的共享依赖关系,只是我不想在手头运行任何东西。我希望能够:

连接到盒子

git clone repo
python repo/folder1/script1.py

script1和script2:的内容

import some-util
<code>

编辑:我忘了提一下,偶尔脚本需要从另一个目录运行,比如:/nas/some_folder/repo/folder1/script1.py args..

此外,该框仅限于python 2.7.5

诀窍是将脚本实现为模块(请阅读此处和此处,了解python -m开关的含义(。

这里有一个结构,还注意每个目录都包含一个名为__init__.py:的(空文件(

repo/
|____utils/
| |____someutil.py
| |___ __init__.py
|___ __init__.py
|____folder1/
|____script1.py
|___ __init__.py

utils.someutil可能包含这样的内容:

def say_hello():
return "Hello World."

您的script1.py可能包含以下内容:

from ..utils.someutil import say_hello
if __name__ == "__main__":
print(say_hello())

然后运行以下内容:

python -m repo.folder1.script1

生产:

Hello World.

最新更新