Python Utils 文件夹放在哪里?

Gil*_*ert 6 python code-organization

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

root
  group1
    script1.py
    script2.py
  group2
    script1.py
    script2.py
  group3
    script1.py
    script2.py
  utils
    utils1.py
    utils2.py
Run Code Online (Sandbox Code Playgroud)

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

但是,这似乎是不好的做法(或“不是 Pythonic”)。此外,实际中的组并不像这样扁平,并且 util 文件夹比上面列出的要多。因此,附加路径解决方案变得越来越混乱。

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

She*_*har 5

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

从长远来看,Keith 提到的关于 distutils 的内容是正确的。否则,这是一个更简单的(当然不是最好的)解决方案。

组织

runscript.py
group1
    __init__.py
    script1.py
utils
    __init__.py
    utils1.py
Run Code Online (Sandbox Code Playgroud)

祈求

python runscript -g grp1 -s script1
Run Code Online (Sandbox Code Playgroud)

运行脚本.py

import utils

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

main()
Run Code Online (Sandbox Code Playgroud)

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


Kei*_*ith 1

你需要使用包。__init__.py当目录中有指定文件时,Python 会将其识别为包。最好还是使用distutils制作一个源代码包,它也会为您安装它。几乎不应该修改 sys.path,安装包会将其放置在标准位置(站点包),因此您不必修改它。