Python 3 - 将包从另一个目录导入Flask应用程序时遇到ImportError

时间:2017-08-11 10:18:44

标签: python flask virtualenv python-import

我用virtualenv创建了一个烧瓶应用程序,它的结构如下所示。我正在尝试将对象从PackageDirectory/fileA.py导入FlaskDirectory/app/models.py

错误:

models.py我使用以下语句:from ...PackageDirectory.fileA import MyObject,但它会出错:ValueError: attempted relative import beyond top-level package。然后我将PackageDirectory声明为源根,并使用from PackageDirectory.fileA import MyObject,因为它给出了错误:ImportError: No module named 'PackageDirectory'

目录结构

           ├── FlaskDirectory
           │    ├── app
           │    │   ├── __init__.py
           │    │   ├── models.py
           │    │   └── views.py
           │    ├── flask
           │    │   ├── Include
           │    │   ├── Lib
           │    │   ├── Scripts
           │    │   ├── tcl
           │    │   └── pip-selfcheck.json
           │    ├── config.py
           │    ├── run.py
           │    └── app.py
           │
           ├── PackageDirectory (a python package)
           │    ├── ipynb (also a package)
           │    ├── utils (also a package)
           │    ├── __init__.py
           │    ├── fileA.py  

FlaskDirectory/run.py

from app import app

if __name__ == '__main__':
    app.run()

FlaskDirectory/app/__init__.py

from flask import Flask
app = Flask(__name__, instance_relative_config=True)
from . import views
app.config.from_object('config')

FlaskDirectory/config.py

DEBUG=True

您看到的FlaskDirectory/app.py文件是空的,但我不确定是否可以删除该文件,或者烧瓶是否在后台使用它

1 个答案:

答案 0 :(得分:0)

具体而言,您可以执行@phd所述的内容。

import sys,os

path = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'PackageDirectory')
sys.path.append(path)

from fileA import obj