我知道这是一个过时的话题,但python中的导入机制/s仍然让大众感到困惑。我想要的是能够导入父目录中的自定义模块,使我能够将项目带到另一个环境中,并使所有导入工作正常。例如这样的结构:
repo
|--- folder1
| |--- script1.py
|--- folder2
| |--- script2.py
|--- utils
|--- some-util.py
如何在script1
和script2
中从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.