gpt4 book ai didi

Python Flask 应用程序在启动时抛出以下错误 ImportError : Import by filename is not supported

转载 作者:行者123 更新时间:2023-12-01 08:41:03 27 4
gpt4 key购买 nike

在安装了所有要求并启动应用程序后,我从 git 克隆了一个 Flask 应用程序

$ python start.py

我收到以下错误

Traceback (most recent call last):
File "start.py", line 6, in <module>
app = create_app("local")
File "C:\Jahangeer\qurbcode\api\app\__init__.py", line 66, in create_app
from app.api_1_0 import apibp as api_1_0, api_spec as api_1_0_spec
File "C:\Jahangeer\qurbcode\api\app\api_1_0\__init__.py", line 78, in <module>
ModuleImport.importModulesFromPath(os.path.dirname(os.path.realpath(__file__)), __name__)
File "C:\Jahangeer\qurbcode\api\app\helpers\module_import.py", line 16, in importModulesFromPath
importlib.import_module("." + module, package)
File "C:\Python27\lib\importlib\__init__.py", line 37, in import_module
__import__(name)
ImportError: Import by filename is not supported.

Start.py有以下代码

import os
from app import create_app

app = create_app("local")

if __name__ == '__main__':
app.run(host= '0.0.0.0', threaded=True)

并且在上面错误中提到的第 66 行的我的 init.py 中有以下内容

 # Setup api/1.0 blueprint
from .api_1_0 import apibp as api_1_0, api_spec as api_1_0_spec
from .admin import admin_bp as admin
app.register_blueprint(api_1_0, url_prefix='/api/1.0')

这是应用程序结构

api
->admin_app
->app
->admin
->api_1_0
->__init__.py
->start.py
->manage.py

我的 api\app\helpers\module_import.py 有以下代码:

import glob
import importlib


class ModuleImport:

@staticmethod
def importModulesFromPath(dir_path, package, import_init = False):
files = glob.glob(dir_path + "/*.py")
for file in files:
module = file.replace(dir_path, "").replace("/", "").replace(".py", "")

if module == "__init__" and not import_init:
continue

importlib.import_module("." + module, package)

我的 api\app\api_1_0__init__.py 有以下代码:第 78 行

ModuleImport.importModulesFromPath(os.path.dirname(os.path.realpath(__file__)), __name__)

最佳答案

您的自动加载器几乎肯定在做坏事(tm)

看起来您的代码设计为在 Linux 上运行,但您却在 Windows 上运行。就其本身而言,这不一定是坏事,但它的编写方式并不支持这一点。具体来说,glob.glob(dir_path + "/*.py")正在返回所有 .py 的路径目录中的文件,它们看起来像 C:\\path\\to\\file.py 。后来外链module = file.replace(dir_path, "").replace("/", "").replace(".py", "")将尝试剥离 .pyC:\\path\\to零件,留给您 \\file ,但是.replace('/', '')不会删除前导反斜杠,因为它正在寻找正斜杠,而 Windows 使用反斜杠。然后您将尝试导入 \\file ,您不能这样做,因为您无法将路径传递给 __import__函数 - 这不是它的工作原理。

短期内,如果您更改 ModuleImport,您可能会发现一切都会变得栩栩如生。拥有 import os 的工具在顶部。然后替换dir_path + "/*.py"os.path.join(dir_path, '*.py') ,和replace("/", "")replace(os.sep, "") 。这应该可以解决您眼前的问题,但您不应该这样保留代码。

从长远来看,这不是自动加载模块的好方法,如果您使用 importlib 来正确加载模块,那么您可能可以以更好的方式加载模块。当我看到像 sys.path.append 这样的东西时,我通常认为这是一种代码味道。或importlib.import敲来敲去。如果您查看 How to load all modules in a folder?,您可能会发现您的代码更容易维护

关于Python Flask 应用程序在启动时抛出以下错误 ImportError : Import by filename is not supported,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53495500/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com