可以从不同位置调用脚本时如何编写导入语句?
Posted
技术标签:
【中文标题】可以从不同位置调用脚本时如何编写导入语句?【英文标题】:How to write import statement when the scripts can be called from different locations? 【发布时间】:2019-05-23 13:07:02 【问题描述】:考虑以下目录结构:
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
我的问题:结合这两个用例的pythonic方式是什么?
可能的解决方案?:推荐还是不推荐?
if __name__ == "__main__":
from a2 import some_func
elif __name__ == "start":
from scripts.a2 import some_func
注意:我使用的是 python 3.x
【问题讨论】:
在a1
中调用from a2 import some_func
和在start
中调用from a1 import some_func
有什么问题?
你可以在a1.py中使用相对导入,更多关于相对导入here
【参考方案1】:
Pythonic 方式是从您的代码创建一个包,然后在您的代码中使用包内引用: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
【讨论】:
以上是关于可以从不同位置调用脚本时如何编写导入语句?的主要内容,如果未能解决你的问题,请参考以下文章
从plsql调用java时Oracle如何导入缺少的java类