从其他 .py 文件导入 类 时 Flask 不工作

Flask not working when importing classes from other .py files

我正在使用 Flask 创建一个 Web 应用程序,并试图从与我的 app.py 文件位于同一目录的 .py 文件中导入另一个 class,但导入不会工作。

详细说明:

这是我的代码,运行良好。

from flask import Flask
import os

from flask import Flask, request, render_template, redirect, url_for, flash
from flask import send_from_directory
#from moleimages import MoleImages
import random
from werkzeug.utils import secure_filename
from keras.models import load_model
import tensorflow as tf
from keras.models import model_from_json

app = Flask(__name__)

@app.route('/')
def index():
    return 'hi'

if __name__ == "__main__":
    app.run(debug=True)

现在,第二个我取消注释 'from moleimages import MoleImages',命令提示符不会为 flask 应用生成任何输出,它会终止。

终端图片:

工作正常:

现在,当我取消注释 moleimages 导入时:

Flask 应用程序自行终止。

有谁知道为什么会这样? moleimages 文件本身运行良好,不会产生任何错误。这是鼹鼠图片文件。

'''
Author@PranavEranki
'''
import numpy as np
from skimage import io
from skimage.transform import resize
import glob
import h5py
import os


'''
This is the helper method for image prep
'''
class MoleImages():
    def __init__(self, dir=None):
        self.dir = dir
        self.size = None

    # Resizing multiple images to a 128 x 128 size
    def resize_bulk(self, wtype, size=(128,128)):
        '''
        Resize Images and create matrix
        Input: size of the images (128,128)
        Output: Numpy array of (size,num_images)
        '''
        self.size = size
        X = []
        image_list = glob.glob(self.dir) #Getting images we need to resize
        n_images = len(image_list)
        most = 2000
        if n_images > most:
            n_images = most
            image_list = image_list[:n_images]
        # Resizing of the images with verbosity
        print('Resizing {} images:'.format(n_images))
        for i, imgfile in enumerate(image_list):
            print('Resizing image {} of {}'.format(i+1, n_images))
            img = io.imread(imgfile)
            img = resize(img, self.size)

            X.append(img)


        return np.array(X)

    def load_test_images(self, dir_b, dir_m):
        X = []
        image_list_b = glob.glob(os.path.join(os.getcwd(), dir_b + '/*.png'))

        n_images_b = len(image_list_b)
        print('Loading {} images of class benign:'.format(n_images_b))
        for i, imgfile in enumerate(image_list_b):
            print('Loading image {} of {}'.format(i+1, n_images_b))
            img = io.imread(imgfile)
            X.append(img)
        image_list_m = glob.glob(os.path.join(os.getcwd(), dir_m + '/*.png'))

        n_images_m = len(image_list_m)
        print('Loading {} images of class benign:'.format(n_images_m))
        for i, imgfile in enumerate(image_list_m):
            print('Loading image {} of {}'.format(i+1, n_images_m))
            img = io.imread(imgfile)
            X.append(img)

        y = np.hstack((np.zeros(n_images_b), np.ones(n_images_m)))

        return np.array(X), y.reshape(len(y),1)

    def load_image(self, filename, size=(128,128)):
        self.size = size
        img = io.imread(filename) #Getting image
        img = resize(img, self.size, mode='constant') * 255 # Resizing image
        if img.shape[2] == 4: #Making sure everything is 3 channels only
            img = img[:,:,0:3]
        return img.reshape(1, self.size[0], self.size[1], 3)

    def save_h5(self, X, filename, dataset):
        '''
        Save a numpy array to a data.h5 file specified.
        Input:
        X: Numpy array to save
        filename: name of h5 file
        dataset: label for the dataset
        '''
        with h5py.File(filename, 'w') as hf:
            hf.create_dataset(dataset, data=X)
        print('File {} saved'.format(filename))

    def load_h5(self, filename, dataset):
        '''
        Load a data.h5 file specified.
        Input: filename, dataset
        Output: Data
        '''
        with h5py.File(filename, 'r') as hf:
            return hf[dataset][:]

    def save_png(self, matrix, dir, tag='img', format='png'):

        # Saving the picture to the directory
        for i, img in enumerate(matrix):
            current_dir = os.getcwd()
            # getting the appropriate filename and directory
            if dir[-1] != '/':
                current_dir = (os.path.join(current_dir, dir + "/"))
                filename = tag + str(i) + '.' + format
            else:
                current_dir = (os.path.join(current_dir, dir))
                filename = tag + str(i) + '.' + format

            # this is some verbosity which I implemented for bug testing - not important
            print('Saving file {}'.format(filename))
            print(current_dir)

            # Making rhe dir benign / malign for data scaled if not present
            if not os.path.exists(current_dir):
                os.makedirs(current_dir)

            # Saving the image to the proper directory
            current_dir = os.path.join(current_dir, filename)

            io.imsave(current_dir, img)



if __name__ == '__main__':
    pass
    #benign = MoleImages()
    #X = benign.load_h5('benigns.h5','benign')

如果 moleimages.py 在同一目录中,您可能需要将导入更改为 from .moleimages import MoleImages

通过这种方式,您可以告诉 python 从同一文件夹中加载具有该名称的文件。否则 python 正在寻找名为 moleimages.

的模块

另一种方法是使用绝对导入,但如果不知道您的应用程序层次结构,我无法告诉您它的外观。

您可以在 PEP 328

中阅读有关相对和绝对导入的更多信息

编辑:还要确保目录 __init__.py 中有

您尝试导入 .moleimages 了吗?您还可以创建一个名为 PYTHONPATH 的环境变量并设置您的工作目录。此环境变量可从 python.

读取