Python Utils文件夹放在哪里?

2024-05-23 16:27:25 发布

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

我有一大堆这样组织的剧本:

root
  group1
    script1.py
    script2.py
  group2
    script1.py
    script2.py
  group3
    script1.py
    script2.py
  utils
    utils1.py
    utils2.py

所有脚本*.py都使用utils文件夹中的函数。现在,我将utils路径附加到脚本,以便导入utils。

然而,这似乎是一个坏的做法(或“不是Python”)。此外,实际上这些组并没有这么简单,而且有比上面列出的更多的util文件夹。因此,附加路径解决方案变得越来越混乱。

我怎样才能以不同的方式组织这件事?


Tags: 函数py路径脚本文件夹utilsrootutils2
3条回答

首先使所有目录可导入,即使用__init__.py。 然后有一个接受参数并基于此调用脚本的顶级脚本。

从长远来看,基思所提到的distutils是正确的。否则这里有一个更简单(肯定不是最好的)的解决方案。

组织

runscript.py
group1
    __init__.py
    script1.py
utils
    __init__.py
    utils1.py

调用

python runscript -g grp1 -s script1

runscript.py

import utils

def main():
    script_to_exec = process_args()
    import script_to_exec as script # __import__
    script.main()

main()

也许您的脚本可以有主函数,然后由runscript调用。 我建议您在顶层有一个脚本来导入脚本。

您可能还对以下内容感兴趣: Python 3: Good location(s) to install own and 3rd party packages?

是的,我可以看到包是如何帮助您的,但是如果您仍然在处理这些实用程序,并且在处理group1、group2等时对它们进行更改,那么进行安装会带来很大的开销

仍然在寻找好的答案。

我们不能从这个虚构的例子中真正知道您的用例是什么。我建议制作一个包含utils模块和其他脚本的包,然后使用脚本中的相对导入,例如from ..utils import utils1。当然,您不会将顶级包称为“根”,而是选择一个与项目名称类似的名称。

如果您真的有很多这样的脚本,那么有一个单独的运行脚本,然后根据命令行参数导入模块可能是有意义的。然后像runner.py <somecommand>这样的东西将导入并执行<top package>.commands.somecommand.runFunction(例如,Django这样做-使项目可扩展)。

相关问题 更多 >