如果“import”和“import”都包含“import”和“import”两个函数,则“import”和“import”都能运行吗?

2024-06-01 05:12:32 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有一个实现为目录(即包)的Python模块,它同时具有顶层函数run和子模块run,那么我能指望from example import run始终导入该函数吗?根据我的测试,至少在Linux上的Python2.6和Jython2.5是这样的,但我能指望这一点吗?我试图搜索有关进口优先权的信息,但找不到任何东西。在

背景:

我有一个相当大的包,人们通常从命令行作为工具运行,但有时也以编程方式使用。我希望这两种用法都有一个简单的入口点,并考虑像这样实现它们:

example/__init__.py

def run(*args):
    print args  # real application code belongs here

example/run.py

^{pr2}$

第一个入口点允许用户从Python访问模块,如下所示:

from example import run
run(args)

后一个入口点允许用户使用以下两种方法从命令行执行模块:

python -m example.run args
python path/to/example/run.py args

这两个工作都很好,涵盖了我需要的一切。在真正使用它之前,我想知道这是一种合理的方法,我可以期望在所有操作系统上使用所有Python实现。在


Tags: 模块方法函数run命令行用户frompy
1条回答
网友
1楼 · 发布于 2024-06-01 05:12:32

我认为这应该一直有效;函数定义将隐藏模块。在

然而,这也让我觉得这是一次肮脏的黑客攻击。干净的方法是

# __init__.py
# re-export run.run as run
from .run import run

即,最小的__init__.py,所有运行逻辑都在run.py中:

^{pr2}$

相关问题 更多 >