Как импортировать с того же уровня __init__.py? - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть такая структура пакета:

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 file:

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

itпечатает:

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 голосов
/ 17 декабря 2018

Вы можете добавить project путь к PYTHONPATH, тогда python может найти пакет src.

Обратите внимание, что когда вы запускаете src/App.py, python попытается найти модули того же уровнякаталог App.py вместо текущего рабочего каталога.И from . import app, api не будет работать, потому что в то время src/App.py на самом деле равно __main__, python не может найти свой относительный пакет.

...