【问题标题】:How to import from same level __init__.py?如何从同级 __init__.py 导入?
【发布时间】:2018-12-17 06:20:28
【问题描述】:

我有这个包结构:

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 的第一行,我试图从当前包中导入应用程序和 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 

它可以工作,但此时代码很难看。

【问题讨论】:

    标签: python import package this init


    【解决方案1】:

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

    请注意,当您运行src/App.py 时,python 将尝试从App.py 的同级目录而不是当前工作目录中查找模块。而from . import app, api就不行了,因为那个时候src/App.py其实就是__main__,python找不到它的相关包。

    【讨论】:

      猜你喜欢
      • 2021-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-12
      • 2015-07-30
      • 2013-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多