Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于python包结构-每个模块的元素_Python_Package_Structure - Fatal编程技术网

关于python包结构-每个模块的元素

关于python包结构-每个模块的元素,python,package,structure,Python,Package,Structure,是否有任何客观、有力的理由反对为每组相关模块创建一个文件,而不是将它们大量打包到单个模块中?例如,假设我有一个子包名为utils,它提供的一个实用程序是关于数据的输入和输出的。我的意思是,如果将大函数(及其重要的相关子函数)放在“私有”模块中,然后通过导入主模块io调用它们是错误的 utils/ io.py _pprint.py _ptable.py 假设\u pprint是一个需要其他一些小子方法的大方法,那么这些子方法也会在\u pprint.py模块中,因为它们之间有着高度的

是否有任何客观、有力的理由反对为每组相关模块创建一个文件,而不是将它们大量打包到单个模块中?例如,假设我有一个子包名为
utils
,它提供的一个实用程序是关于数据的输入和输出的。我的意思是,如果将大函数(及其重要的相关子函数)放在“私有”模块中,然后通过导入主模块
io
调用它们是错误的

utils/
  io.py
  _pprint.py
  _ptable.py
假设
\u pprint
是一个需要其他一些小子方法的大方法,那么这些子方法也会在
\u pprint.py
模块中,因为它们之间有着高度的相关性


基本上,问题在于我有一个
io.py
模块(以及其他一些模块),其中包含20个函数,阅读/滚动这些函数很难找到我想要更改的特定函数。我希望(作为一个例子)有一个
io
模块,可以通过
import package.io
调用该模块,然后在
io.py
内部导入与I/O相关的其他模块,或者类似的东西(也许我需要用子包来代替,以使用更多的
\uu init\uuuuuuuuy
),只要它仍然是可导航的,拥有一堆独立的文件就没有什么错

关于“可通过import package.io调用的io模块”的问题,简单的方法是将目录结构化:

packages -> io -> __init__.py 
在_uinit_uuuuuuu.py中,具有子模块的导入:

__init_uuuuuuuuy.py:

from packages.io import submodule
  • 调用
    import packages.io
    时,子模块将是属性 包的数量

  • 请记住_uinit__uuy.py导入需要来自主脚本的 透视图

运行此命令将为您提供目录和文件的布局:

import os

os.makedirs("./packages/io")
with open("./main.py", 'w') as f:
    f.write("import packages.io as io\n")
    f.write("io.module1.call()\n")
    f.write("io.module2.call()\n")

with open("./packages/io/__init__.py", 'w') as f:
    f.write("from packages.io import module1\n")
    f.write("from packages.io import module2\n")

with open("./packages/io/module1.py", 'w') as f:
    f.write("def call():\n")
    f.write("\tprint('Module 1 called')")

with open("./packages/io/module2.py", 'w') as f:
    f.write("def call():\n")
    f.write("\tprint('Module 2 called')")

不,只要它仍然是可导航的,拥有一堆独立的文件没有什么错。唯一需要记住的是导入是从主脚本的角度来看的,因此
dir1->dir2->script
中的脚本需要在
dir1->dir2->dir3->script
中导入脚本,作为
import dir1.dir2.dir3.script
从主脚本运行时,但当从测试中的脚本运行时,将作为
import dir3.script
导入。此外,每个子文件夹中都需要一个
\uuuu init\uuuu.py
。@tgikal谢谢。不要害怕把它作为答案贴出来。