我有一个flask restful项目,其布局如下(为方便起见,文件名已更改)
myproject/
__init__.py
app.py
common/
__init__.py
util.py
foo/
__init__.py
main.py
utilities.py
foo/
只是一个包含其中一个API端点的代码的文件夹,我计划在将来添加其他的,因此我有一个{
foo/main.py
返回 是什么引起的?我尝试了多种导入方式:
但都没用。在 这是 如果重要的话,我会用激活的virtualenv来做这些foo/utilities.py
中的类也使用了common/util.py
中的一些函数,但是当我试图从common/util.py
导入到{import common.util
ModuleNotFoundError: No module named 'common'
from common.util import my_func
from .common.util import my_func
from myproject.common.util import my_func
myproject/app.py
,以防有问题:from flask import Flask
from flask_restful import Api
from foo.main import Foo
app = Flask(__name__)
api = Api(app)
api.add_resource(Foo, '/Foo')
if __name__ == "__main__":
app.run()
在python3中,这是一个绝对的导入,即带有
common/
子目录的目录必须在sys.path
中。在你的情况下,这肯定是个错误的做法。在此导入要求
common
是foo
的子目录,但实际情况并非如此。在最后,这是最好的方法,但要使其工作,
myproject/
子目录的父目录必须在sys.path
中。要么安装整个myproject
,要么将父目录添加到$PYTHONPATH
环境变量中,要么将目录添加到foo/main.py
中的sys.path
。比如:或者
^{pr2}$/home/to/parentdir
是myproject/
所在的目录。在安装}:
myproject
或将其父目录添加到sys.path
之后,还可以使用相对导入。您需要记住,common
是与foo
相比的同级包,因此导入必须不是来自.common
,而是来自{相关问题 更多 >
编程相关推荐