当可以从不同位置调用脚本时,如何编写导入语句?

时间:2018-12-24 10:34:44

标签: python python-3.x import python-module python-packaging

请考虑以下目录结构:

project/ 
    scripts/
        a1.py
        a2.py
    start.py

start.py依赖于a1.py,而a1.py使用some_func中存在的称为a2.py的函数。此外,a1.py也是一个独立的脚本,可以独立调用。现在出现两种情况:

案例1 :(独立脚本) 我将如下导入some_func

from a2 import some_func

案例2 :(start.py呼叫

from scripts.a2 import some_func

我的问题:将两个用例结合起来的有效方法是什么?

可能的解决方案?:是否建议这样做?

if __name__ == "__main__":
    from a2 import some_func
elif __name__ == "start":
    from scripts.a2 import some_func

注意:我正在使用python 3.x

1 个答案:

答案 0 :(得分:1)

Python的方式是根据您的代码创建一个包,然后在您的代码中使用包内引用:https://docs.python.org/3/tutorial/modules.html

from . import some_func  # from scripts in same folder
from .scripts import some_func  # from start.py

另外,打包并安装解决方案后,您将能够使用绝对路径(来自软件包名称),例如:

# this will work from anywhere
from mypackage.scripts import some_func