【问题标题】:Flask refering to root folder circular importFlask 引用根文件夹循环导入
【发布时间】:2022-07-06 21:39:18
【问题描述】:

我有一个 Flask 应用程序,其构造如下:

--- /app
------ /__pycache__
------ /static
--------- /files
--------- /assets
--------- /images
------ /templates
------ api.py
------ utils.py
------ config.py
------ sftp.py
--- wsgi.py 

wsgi.py:

from app.main import app
 
if __name__ == "__main__":
        app.run()

main.py:

from flask import Flask, render_template, request, session, flash, url_for, redirect
from werkzeug.utils import secure_filename
from .utils import *
from .config import *
from .sftp import sync_work_days

app = Flask(__name__)
app.secret_key = b'very_secret_key'
[...]

config.py:

import os
from wsgi import app

ROOT_PATH = app.instance_path

sftp.py:

import pysftp as sftp
from .config import *
from .utils import upload_working_days
import time, os
from datetime import datetime
from config import ROOT_PATH

def sync_work_days():
    cnopts = sftp.CnOpts()
    cnopts.hostkeys = None

    s = sftp.Connection(host=SFTP_HOSTNAME, username=SFTP_USERNAME, password=SFTP_PASSWORD, cnopts=cnopts)
    print("Connection succesfully established...")

    remoteFilePath = '/files/company'
    
    files = s.listdir_attr(remoteFilePath)
    if files == []:
        return "empty"
    else:
        for f in files:
            localFilePath = os.path.join(ROOT_PATH, 'static/files/company')
            # s.get(remoteFilePath, localFilePath)
            upload_working_days(localFilePath)
            time.sleep(5)
            print("UPLOAD DONE")
            s.rename(remoteFilePath + f, remoteFilePath + "/archives/" + f)

当我运行应用程序时,我收到以下错误:

from wsgi import app
ImportError: cannot import name 'app' from partially initialized module 'wsgi' (most likely due to a circular import) (D:\[...redacted...]\wsgi.py)  

我要做的就是通过SSH下载一个文件并将它放在app/static/files中,我不能只是硬编码路径,因为部署环境不同。

【问题讨论】:

  • 我尝试将 from wsgi import app 替换为 from app.main import app 但它给出了同样的错误。

标签: python flask


【解决方案1】:

您有一个循环导入,因为您正在从 wsgi.py 导入 config.py 中的应用程序,它从导入 config.py 的 main.py 获取它。

您正在 config.py 中导入应用程序,因为您需要从中进行设置。您是否考虑过将所有设置保存在 config.py 中并从那里将它们导入 main.py 中?这似乎是合乎逻辑的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-22
    • 2014-05-20
    • 1970-01-01
    • 2019-07-30
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    相关资源
    最近更新 更多