如何从同一级别__init__.py导入?

时间:2018-12-17 06:20:29

标签: python import package this init

我有这个包装结构:

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 

它可以工作,但是此时代码很丑。

1 个答案:

答案 0 :(得分:0)

您可以将project路径添加到PYTHONPATH,然后python可以找到src软件包。

请注意,当您运行src/App.py时,python将尝试从App.py的同一级别目录而不是当前工作目录中查找模块。并且from . import app, api不起作用,因为当时src/App.py实际上是__main__,python无法找到其相对包。