我刚刚开始学习如何用Python编码(来自Java背景)。
我有一个非常基本的项目结构,使用最简单的MVC形式:
myproject
controllers
__init__.py
controller.py
models
__init__.py
model.py
views
__init__.py
view.py
main.py
假设我从view.py开始,并且需要在它和它的控制器之间建立链接,我知道我必须使用import命令来导入控制器:
从控制器导入控制器
我知道这是行不通的,因此我使用相对路径来尝试使其工作。
来自..controllers导入控制器
我还知道这是行不通的,因为它无法真正看到该文件夹,以便修复需要将myproject文件夹本身包装为包的问题。但这对我来说没有意义。
我在这里读到,这种文件结构几乎是一种“反模式”。但是为什么呢?MVC通过解耦它们的功能在结构上是合理的,因此将它们分成各自的程序包是有意义的。
问题来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
您不能只考虑“文件”,而要考虑软件包。您的整个项目应该是与其他任何软件包一样安装在Python环境中的自己的软件包。这些之间没有根本区别:
from django.db import models
from myproject.controllers import controller
django是一个全局安装的软件包。myproject
应该是一个全局安装的软件包。
如果没有一个全局的“ controllers”模块浮动,那么它显然应该是更大程序包的一部分。
在包中,您可以根据需要进行相对导入,这通常是简写形式,如果重命名顶级包,则可能会有所帮助,但这样做没有意义。
始终考虑将软件包最终发布到PyPI或构建一个轮子,然后分发给生产服务器进行安装,即使您永远不会做任何一件事情。
回答来源:stackoverflow