我有一个flask restful项目,其文件布局如下(为方便更改了文件名)
myproject/
__init__.py
app.py
common/
__init__.py
util.py
foo/
__init__.py
main.py
utilities.py
foo/
只是一个包含 API 端点代码的文件夹,我计划在未来添加其他端点,因此我有一个 common/util.py
文件,其中包含可重用的函数,我将在其他 API 端点中使用。
foo/main.py
from flask_restful import Resource, request
from utilities import Analysis
class Foo(Resource):
def get(self):
pass
在 foo/utilities.py
中,我有一些带有方法的类来获取一些数据,我将这些类导入到 foo/main.py
中以返回JSON响应。
foo/utilities.py
中的类还使用了来自 common/util.py
的一些函数,但是当我尝试从 common/util.py
中导入一些东西到 foo/utilities.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()
如果有影响的话,我正在激活的虚拟环境中完成所有操作。
myproject
吗?还是直接作为脚本运行foo/main
而没有进行安装?如果是后者,那么myproject
在sys.path
中不可用,只有目录foo
,并且它不是一个包,所以你不能使用相对导入。 - phdfoo/main.py
,我运行myproject/app.py
来运行整个 API,它可以正常运行,但在foo/utilities.py
中导入common.util
失败,为了测试它,我运行foo/utilities.py
,然后得到上面写的错误。 - gigamarrpython setup.py install
或pip install
,将myproject
的副本放置到当前Python(或已经在sys.path
中的任何目录)的site-packages/
目录中。当然,你必须拥有setup.py
文件。 - phd