Хорошо, здесь много информации, но это результат того, что я несколько дней искал это решение. Я видел, как многие люди задают этот вопрос в разных формах, но не дают хорошего ответа, и я думаю, что я действительно близок к его решению!
У меня есть полностью работающий сценарий python, который использует smartsheet- * Модуль 1053 * -sdk, но когда я запускаю его как exe-файл, связанный с Pyinstaller, он считывает объекты smartsheet в виде строк, и я не могу получить доступ ни к одному из атрибутов. Модуль имеет подпапку с названием «models», а другая подпапка называется «enums». Я подумал, что мне нужно создать крючок для их импорта, поэтому я попытался его создать, но все равно не повезло. Хуки читались при компиляции, но они не работали.
Для справки приведена структура пакета smartsheet .
Информация о системе
Все самые актуальные версии: Python 3.7 Pyinstaller 3.6 Smartsheet 2.86
Операционная система: Windows 10
Пока предпринимаются попытки
Кто-то нашел решение проблемы в этой публикации , но они не предоставили свое решение, так что это не сильно помогло. Я попытался добавить операторы импорта, как было предложено здесь
Это попытка подключения, которую я создал для smartsheet.models:
from PyInstaller.utils.hooks import collect_submodules
hiddenimports = collect_submodules('smartsheet.models')
По какой-то возможной причине это не работает
Я думаю, что это как-то связано с информацией в файлах модуля init , но я не уверен, что с этим делать. init из основного модуля имеет следующий оператор:
from .smartsheet import Smartsheet, fresh_operation, AbstractUserCalcBackoff # NOQA
, а init из подмодуля моделей содержит операторы для импорта отдельных моделей, найденных в directory:
from __future__ import absolute_import
# import models into model package
from .access_token import AccessToken
from .account import Account
from .alternate_email import AlternateEmail
from .attachment import Attachment
from .auto_number_format import AutoNumberFormat
# This continues for other models
Так что я думаю, что мне нужно каким-то образом mimi c этот оператор импорта модели в моем файле ловушек, но я не знаю, как это сделать.
Код & Сообщение об ошибке:
Он создает основной объект smartsheet нормально, поскольку он не ссылается ни на один из элементов подмодуля:
# Creates a smartsheet object for an account with an api access token
ss = smartsheet.Smartsheet(a_token)
Но все, что ссылается на подмодули в этом объекте, завершается ошибкой
ss.Sheets.get_sheet(residential_id)
Это сообщение об ошибке, которое я получаю при запуске программы:
ImportError! Could not load api or model class Users
# print statement I added to show the string object that is supposed to be a smartsheet object
<smartsheet.smartsheet.Smartsheet object at 0x00000292D4232408>
Exception type: AttributeError
Exception message: 'str' object has no attribute 'get_sheet'
Stack trace:
File: sum_report.py
Line: 516
Function nameName: main
Message:
File: snow_functions.py
Line: 437
Function nameName: connect_smartsheet
Message: