函数没有属性

时间:2019-11-06 20:05:13

标签: python python-3.x fits

我正在尝试编写此代码,它在pycharm中可以完美运行。但是,每当我尝试将其转换为exe后运行它时,都会出现错误“函数没有属性'read_exif'”。我为此功能使用的软件包不是手动安装的,但是在pycharm中不会出现任何错误。

def Raw_Fits(self, raw_path, save_location):
    paths = [raw_path]
    bad_pixels = rawpy.enhance.find_bad_pixels(paths)

    for path in paths:
         with rawpy.imread(path) as raw:
             rawpy.enhance.repair_bad_pixels(raw, bad_pixels, method='median')
             rgb = raw.postprocess(no_auto_bright=True, use_auto_wb=False, gamma=None)
    a = np.array(rgb)
    print(a.shape)

    filename = raw_path
    raw_image = Raw(filename)
    buffered_image = np.array(raw_image.to_buffer())

    image = Image.frombytes('RGB', (raw_image.metadata.width, raw_image.metadata.height), a).convert('LA')
    xsize, ysize = image.size
    data1 = np.array(image.getdata())
    print(data1.shape)

    r = [(d[0]) for d in data1]
    g = [(d[1]) for d in data1]
    r_1 = np.array(r)
    g_1 = np.array(g)

    r_data = np.array(r_1.data)
    g_data = np.array(g_1.data)
    print(r_data.shape)

    r_data = r_data.reshape(ysize, xsize)
    g_data = g_data.reshape(ysize, xsize)

    a = cr2fits(raw_path, 0)
    a.read_cr2()
    a.read_exif()

    concat = r_data + g_data
    hdu = fits.PrimaryHDU(data=concat)
    hdu.header.set('OBSTIME', )
    hdu.header.set('OBSTIME', a.date)
    hdu.header.set('EXPTIME', a.shutter)
    hdu.header.set('APERTUR', a.aperture)
    hdu.header.set('ISO', a.iso)
    hdu.header.set('FOCAL', a.focal)
    hdu.header.set('ORIGIN', a.original_file)
    hdu.header.set('FILTER', a.colors[a.colorInput])
    hdu.header.set('CAMERA', a.camera)
    hdu.writeto(save_location, overwrite=True)
    print("Conversion Complete!")

这是exe执行过程中出现的问题的屏幕截图。 Error Sreenshot

1 个答案:

答案 0 :(得分:0)

假设您使用的是this github module,则表示您错误地读取了EXIF数据。

应该这样做:

ws2tcpip.h

from cr2fits import cr2fits
a = cr2fits(raw_path, 0)
a.read_cr2()
a.read_exif()

我的代码正在做import cr2fits as crf a = crf.cr2fits(raw_path, 0) a.read_cr2() a.read_exif() 作为类a的实例,该类具有方法crf.cr2fitscr2fits.read_cr2()cr2fits.read_exif()然后可以使用这些方法。如果您想学习如何使用类,则可以通过搜索“ Python中的面向对象编程”来了解更多信息。

这是否可以解决您的a问题是另一回事;在最佳情况下,从python到.exe的打包非常困难。