我正在使用Flask创建一个Web应用程序,并尝试从与我的app.py文件位于同一目录中的.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)
现在,第二个我取消注释“从moleimages import MoleImages”,命令提示符不为flask应用生成任何输出,并且终止。
终端图像:
现在,当我取消注释痣图像导入时:
flask应用程序会自行终止。
有人知道为什么会这样吗? moleimages文件本身可以正常工作,并且不会产生任何错误。这是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')
答案 0 :(得分:0)
如果moleimages.py
位于同一目录中,则可能需要将导入更改为from .moleimages import MoleImages
这样,您告诉python从同一文件夹中加载具有该名称的文件。否则,python会寻找名为moleimages
的模块。
另一种方法是使用绝对导入,但是我不告诉你在不知道应用层次结构的情况下会是什么样子。
您可以在PEP 328
中阅读有关相对和绝对导入的更多信息。编辑:还要确保目录中有__init__.py
答案 1 :(得分:0)
您尝试导入form-group
吗?您还可以创建一个名为.moleimages
的环境变量并设置工作目录。可以从python读取此env变量。