Python 如何使用uuu init_uuuu.py组织代码?

Python 如何使用uuu init_uuuu.py组织代码?,python,google-app-engine,organization,Python,Google App Engine,Organization,我刚刚开始使用谷歌应用程序引擎,一直在寻找良好的实践和代码组织。我的大部分问题都来自于对\uuuu init\uuuuuy.py的混淆 我当前的测试结构看起来像 /website main.py /pages __init__.py #1 blog.py hello2.py hello.py /sub __init__.py #2 base.py 我正在尝试使用main.py作为一个文件,它只指向/pages和/pages

我刚刚开始使用谷歌应用程序引擎,一直在寻找良好的实践和代码组织。我的大部分问题都来自于对
\uuuu init\uuuuuy.py
的混淆

我当前的测试结构看起来像

/website
  main.py
  /pages
    __init__.py #1
    blog.py
    hello2.py
    hello.py
    /sub
      __init__.py #2
      base.py
我正在尝试使用main.py作为一个文件,它只指向/pages和/pages/sub中的所有内容。/pages中的大多数模块共享几乎所有相同的导入(例如导入urllib),是否有一种方法可以定义/pages中的所有内容导入我想要的内容,而不是将其添加到每个单独的模块中

目前在
\uuuu init\uuuuuuupy
\1我有

然而,我的模块blog.py说没有定义BaseHandler(base.py中的一个函数)。 我的最终目标是拥有像

main.py
from pages import *
#be able to call any function in /pages without having to do blog.func1() or hello.func2()
#rather just func1() and func2()

并且能够在
\uuu init\uuuuuuuuupy
/pages
中共享模块的通用导入。例如,它们共享urllib和base.py中的所有函数。感谢您抽出时间阅读本文,我期待着您的见解。

听起来您认为
\uuuu init\uuuuupy
是包中其他模块的初始值设定项。事实并非如此。它将
页面
转换为一个包(允许其文件和子目录成为模块),并在程序调用
导入页面
时像普通模块一样执行。假设它取名为
pages.py


因此,如果您真的想将所有内容转储到同一名称空间中,init#2可以包含来自基本导入的
*
(这将把
base
中的所有内容导入
sub
的名称空间),并且
blog.py
可以包含来自子导入的
。明白了吗?

导入到
\uuuu init\uuu
中的项目不会自动也可用于同一软件包中的模块。您仍然需要在需要的地方明确地导入
BaseHandler
,例如在blog.py中。感谢您对init.py的用途进行了说明,并感谢您对示例的介绍!帮助很大,我现在得到了我想要的功能。我必须更多地玩弄它,才能真正把我的头绕在它身上,但你把我带向了正确的方向。
main.py
from pages import *
#be able to call any function in /pages without having to do blog.func1() or hello.func2()
#rather just func1() and func2()