2010-08-16 324 views
0

我试图保留一个有点有组织的目录结构,因为我打算添加越来越多的脚本。因此,可以说我有一个结构是这样的:根据需要包含文件的正确方法

/src/main.py 
/src/db/<all my DB conn & table manipulation scripts> 
/src/api/<all my scripts that call different APIs> 

我main.py脚本将包括从数据库& API文件夹中的某些类。我在每个文件夹中都有空白的_init_____.py文件,因此它们都包含在内。但是,说我想要在api文件夹的脚本中包含db文件夹中的类?就像我需要以某种方式备份一个目录?

from db.Conn import QADB 

我在V2.6:当我在他们这样一行的API脚本失败。

更新:我试过一个相对导入,但得到这个?

from ..db.Conn import QADB 
    ^SyntaxError: 
invalid syntax 
+1

你有一个/src/__init__.py文件? – 2010-08-16 21:31:55

回答

3

你设置它的方式是创建三个不同的模块 - 这可能是也可能不是你想要做的。如果你想它可以管理不同任务的通用模块,如下所示,你可以安排一下:

mymodule 
|- __init__.py 
|--database 
| |- __init__.py 
| |- dbclasses.py 
| 
|--api 
| |- __init__.py 
| |- apiclasses.py 
| 
|--other 

[etc] 

如果你有像这样,想使用API​​和数据库的功能,你可以这样开始

from mymodule.database.dbclasses import MyDBClass 
from mymodule.api.apiclasses import MyAPIClass 

注意你的方式:你的顶部“模块”的名称是src(它不是一个模块,因为它没有__init__.py文件)。

如果您在顶级模块中使用许多常用功能(来自任何子模块),则可以将它们包括在顶部__init__.py中,并简单地调用from mymodule import MyDBClass, MyAPIClass

内容的顶部__init__.py

from mymodule.database.dbclasses import MyDBClass 
from mymodule.api.apiclasses import MyAPIClass 
__all__ = ['MyDBClass', 'MyAPIClass'] 
+0

完美!这是我需要做的。谢谢! – Nathan 2010-08-16 21:38:32

1

使用相对进口:

from ..db.Conn import QADB 
+0

哈。我甚至懒得去尝试。认为它会完全失败。这就是我想得到的结果。但是,我得到这个错误: 从..db.Conn进口QADB ^ 语法错误:无效的语法 – Nathan 2010-08-16 21:33:20

+0

与他们插手了几次后,相对于进口仍然是一个谜给我。 – delnan 2010-08-16 21:33:46

+0

如果src文件夹是一个包,那么您可以从那里导入:从src.db导入QADB – pmalmsten 2010-08-16 21:34:57

1

FWIW,我不喜欢这样的结构。根据脚本的功能构建您的结构。如果您想编写调用外部数据库API的脚本,该怎么办?这是在API目录还是在db目录?

是的,使用awesomo建议的相关输入。

1

下一个共同的一揽子移动的一切:

mypkg/main.py 
mypkg/db/... 
mypkg/api/.. 

然后使用绝对导入

from mypkg.db.stuff import somestuff 

这种方式,您也可以分发MYPKG一个鸡蛋。

相关问题