我有这个包装结构:
project/
└── src
├── __init__.py
└── App.py
这是 __ init __ 文件:
from flask import Flask
from flask_restful import Resource, Api
app = Flask(__name__)
api = Api(app)
和 App.py 文件:
from . import app, api
from flask_restful import Resource
class HelloWorld(Resource):
def get(self):
return {'hello': 'world'}
api.add_resource(HelloWorld, '/')
if __name__ == '__main__':
app.run(debug=True)
在App.py的第一行,我尝试从当前包中导入app和api,但是当我使用以下命令运行该应用程序时
python src/App.py
它打印:
Traceback (most recent call last):
File "src/App.py", line 2, in <module>
from src import app, api
ModuleNotFoundError: No module named 'src'
如何在不更改所需结构概念的情况下解决问题。我知道我可以改用另一个子目录/子包,然后将 init .py移到那里,然后使用from subpackage import app, api
,它会工作。但是我不想要那个,我想要保留结构。
当我说:
from __init__ import app, api
它可以工作,但是此时代码很丑。
答案 0 :(得分:0)
您可以将project
路径添加到PYTHONPATH
,然后python可以找到src
软件包。
请注意,当您运行src/App.py
时,python将尝试从App.py
的同一级别目录而不是当前工作目录中查找模块。并且from . import app, api
不起作用,因为当时src/App.py
实际上是__main__
,python无法找到其相对包。