Колба не работает при импорте классов из других .py файлов - PullRequest
0 голосов
/ 05 сентября 2018

Я использую Flask для создания веб-приложения и пытаюсь импортировать другой класс из файла .py в тот же каталог, что и мой файл app.py, но импорт не будет работать.

Для уточнения:

Это мой код, который работает и работает нормально.

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)

Теперь, когда я раскомментирую «от molimages import MoleImages», командная строка не генерирует выходные данные для приложения колбы и завершается.

Терминальные изображения:

Работает нормально: enter image description here

сейчас, когда я раскомментирую импорт molimages:

enter image description here

Приложение фляги просто завершает работу.

Кто-нибудь знает, почему это происходит? Файл moleimages прекрасно работает сам по себе и не генерирует ошибок. Вот файл molimages.

'''
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')

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Вы пробовали импортировать .moleimages? Вы также можете создать переменную env с именем PYTHONPATH и установить свой рабочий каталог. Эта переменная env доступна для чтения из python.

0 голосов
/ 05 сентября 2018

Если moleimages.py находится в том же каталоге, вы можете изменить импорт на from .moleimages import MoleImages

Таким образом, вы указываете python загружать файл с таким именем из той же папки. В противном случае python ищет модуль с именем moleimages.

Другой способ - использовать абсолютный импорт, но я не могу сказать вам, как это будет выглядеть, не зная иерархию вашего приложения.

Подробнее об относительном и абсолютном импорте можно прочитать в PEP 328

Редактировать: также убедитесь, что у вас есть __init__.py в каталоге

...