在哪里放置Python Utils文件夹?
我有一大堆这样组织的脚本:在哪里放置Python Utils文件夹?,python,code-organization,Python,Code Organization,我有一大堆这样组织的脚本: 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 然而,这似乎是一种不好的做法(或“不是Pythonic
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
然而,这似乎是一种不好的做法(或“不是Pythonic”)。此外,组实际上并不像这样扁平,并且有比上面列出的更多的util文件夹。因此,附加路径解决方案变得越来越混乱
我如何以不同的方式组织它?您需要使用软件包。当目录中有一个名为
\uuuu init\uuuu.py
的文件时,Python会将其识别为包。最好还是用它来制作一个源程序包,它也会为您安装它。修改sys.path几乎永远不应该完成,安装软件包会将其放置在标准位置(站点软件包),因此您不必修改它 您可能还对以下方面感兴趣:
是的,我可以看出软件包是如何起到帮助作用的,但是如果您仍在处理UTIL,并且在处理group1、group2等时对其进行更改,则进行安装会带来很大的开销
仍然在寻找这个问题的好答案。首先导入所有目录,即使用
\uuuu init\uuuu.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调用。
我建议您在顶层创建一个脚本,用于导入脚本 我们无法从人为的示例中真正了解您的用例是什么。我建议制作一个包含您的utils模块和其他脚本的包,然后使用脚本的相对导入,例如
from..utils import utils1
。当然,您不会将顶层包称为“root”,而是选择一个类似于项目名称的名称
如果您确实有很多这样的脚本,那么使用一个运行脚本,然后根据cmdline参数导入模块可能是有意义的。类似于runner.py
的东西随后将导入并执行.commands.somecommand.runFunction
(例如,Django这样做-使项目可扩展)