我正在尝试保持一个有点组织的目录结构,因为我计划添加越来越多的脚本。所以我想说我有这样的结构:
/src/main.py
/src/db/<all my DB conn & table manipulation scripts>
/src/api/<all my scripts that call different APIs>
我的main.py脚本将包含db&amp ;;的某些类。根据需要api文件夹。我在每个文件夹中都有空白的_____init_____.py文件,因此它们包含在内。但是说我想在api文件夹的脚本中包含db文件夹中的一个类?就像我需要以某种方式支持一个目录?当我有这样的行时,api脚本会失败:
from db.Conn import QADB
我在v2.6。
更新:我尝试了相对导入,但得到了这个吗?
from ..db.Conn import QADB
^ SyntaxError:
invalid syntax
答案 0 :(得分: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']
答案 1 :(得分:1)
使用相对导入:
from ..db.Conn import QADB
答案 2 :(得分:1)
FWIW,我不喜欢那种结构。将您的结构基于脚本执行的操作。如果要编写调用外部数据库API的脚本,该怎么办?这是在API目录还是db目录中?
是的,使用相对输入作为awesomo建议。
答案 3 :(得分:1)
将所有内容移到一个通用包裹下:
mypkg/main.py
mypkg/db/...
mypkg/api/..
然后使用绝对导入
from mypkg.db.stuff import somestuff
这样你也可以将mypkg分发为鸡蛋。