gpt4 book ai didi

python - 需要为 smartsheet-python-sdk 和 PyInstaller 创建一个钩子(Hook)

转载 作者:太空宇宙 更新时间:2023-11-03 19:46:27 24 4
gpt4 key购买 nike

好吧,这里有很多信息,但这是我几天来寻找这个解决方案的结果。我看到很多人以各种形式问这个问题,但没有好的答案,我想我真的很接近解决它了!

我有一个功能齐全的 python 脚本,它使用 smartsheet-python-sdk 模块,但是当我将其作为与 Pyinstaller 捆绑在一起的 exe 运行时,它将 smartsheet 对象读取为字符串,并且我无法访问任何属性。该模块有一个名为“models”的子文件夹,其中还有另一个名为“enums”的子文件夹。我认为我需要创建一个钩子(Hook)来导入这些,所以我尝试构建一个,但仍然没有成功。编译时读取了钩子(Hook),但它们不起作用。

此处供引用的是smartsheet package structure .

系统信息

一切都是最新的当前版本:Python 3.7py安装程序3.6智能表2.86

操作系统:Windows 10

到目前为止的尝试

有人在 this post 中找到了问题的解决方案但他们没有提供解决方案,所以没有太大帮助。我尝试按照建议添加导入语句 here

这是我为 smartsheet.models 创建的尝试 Hook :

from PyInstaller.utils.hooks import collect_submodules

hiddenimports = collect_submodules('smartsheet.models')

它不起作用的一些可能原因

我认为这与模块init文件中的信息有关,但我不知道如何处理它。主模块中的init有这样的语句:

from .smartsheet import Smartsheet, fresh_operation, AbstractUserCalcBackoff  # NOQA

模型子模块中的init具有导入目录中找到的各个模型的语句:

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

所以我认为我需要在我的钩子(Hook)文件中以某种方式模仿这个模型导入语句,但我不知道该怎么做。

代码和错误消息:

它创建了主 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:

最佳答案

我遇到了同样的问题。我发现您必须将所需的所有单独模块添加为隐藏导入。

打开创建的 .spec 文件。如果您以前使用过 pyinstaller script.py,请在脚本目录中查找文件 script.spec。打开它并修改该部分:

hiddenimports=[
'smartsheet.models'
'smartsheet.sheets',
'smartsheet.search',
'smartsheet.users'
]

然后运行pyinstaller script.spec以将spec文件与隐藏导入一起使用。尝试再次运行您的包。如果您的脚本再次失败,您可能需要向隐藏的导入数组添加其他模块(只需查看错误中引用的模块。)

在添加模型、工作表和搜索后,我终于开始工作了。

关于python - 需要为 smartsheet-python-sdk 和 PyInstaller 创建一个钩子(Hook),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60106700/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com