我不能用 Pyinstaller 打包我的程序,因为我安装了 enum34,不能卸载,因为用过的模块需要它。有什么建议么?

I can't package my program with Pyinstaller because I have enum34 installed, can't uninstall because a used module needs it. Any suggestions?

因此,我正在尝试打包我为工作编写的程序,该程序允许人们同时在多个电子表格 (@Smartsheets) 上添加、更新、删除相同的 row/columns。我正在使用 Kivy 和 Smartsheet-Python-SDK

当我按照 Kivy 的指示使用 PyInstaller 打包应用程序时,出现错误: "module 'enum34' has no attribute 'IntFlag' " 和 "'str' 对象没有属性 'items' "

现在,当我搜索此错误时,我看到的唯一建议是卸载 enum34 并安装常规枚举模块。

更大的问题是 Smartsheet API 需要 enum34,而 PyInstaller 需要常规枚举。

关于如何解决这个问题有什么建议吗?我可以吃我的蛋糕也可以吃吗,两者都安装了一些如何?似乎 enum34 安装在与 enum 相同的文件夹中(我可能是错的,但我想我不止一次阅读过)。

我已经查看了整个网站上的建议,但我需要以某种方式根据每件事的要求同时拥有这两个建议。

我试过只卸载 enum34 并安装常规枚举,但正如您所猜到的那样,它破坏了我的智能表模块。

这是错误,不确定我的代码是否必要(加上我努力工作,不想它被盗)。

53 INFO: PyInstaller: 3.4
53 INFO: Python: 3.7.2
54 INFO: Platform: Windows-10-10.0.17763-SP0
55 INFO: wrote C:\Users\mpalu\Desktop\Smartsheet Mass Editor\SSMassEditor.spec
57 INFO: UPX is not available.
58 INFO: Extending PYTHONPATH with paths
['C:\Users\mpalu\Desktop\Smartsheet Mass Editor',
 'C:\Users\mpalu\Desktop\Smartsheet Mass Editor']
58 INFO: checking Analysis
58 INFO: Building Analysis because Analysis-00.toc is non existent
59 INFO: Initializing module dependency graph...
61 INFO: Initializing module graph hooks...
63 INFO: Analyzing base_library.zip ...
Traceback (most recent call last):
  File "<string>", line 41, in <module>
  File "<string>", line 13, in walk_packages
  File "C:\Users\mpalu\AppData\Local\Programs\Python\Python37-32\lib\pkgutil.py", line 130, in iter_modules
    for name, ispkg in iter_importer_modules(i, prefix):
  File "C:\Users\mpalu\AppData\Local\Programs\Python\Python37-32\lib\pkgutil.py", line 149, in _iter_file_finder_modules
    import inspect
  File "C:\Users\mpalu\AppData\Local\Programs\Python\Python37-32\lib\inspect.py", line 40, in <module>
    import linecache
  File "C:\Users\mpalu\AppData\Local\Programs\Python\Python37-32\lib\linecache.py", line 11, in <module>
    import tokenize
  File "C:\Users\mpalu\AppData\Local\Programs\Python\Python37-32\lib\tokenize.py", line 33, in <module>
    import re
  File "C:\Users\mpalu\AppData\Local\Programs\Python\Python37-32\lib\re.py", line 143, in <module>
    class RegexFlag(enum.IntFlag):
AttributeError: module 'enum' has no attribute 'IntFlag'....
....
3090 INFO: Caching module hooks...
3096 INFO: Analyzing C:\Users\mpalu\Desktop\Smartsheet Mass Editor\SS_Mass_Editor.py
3676 INFO: Processing pre-safe import module hook   urllib3.packages.six.moves
Traceback (most recent call last):
  File "<string>", line 2, in <module>
  File "C:\Users\mpalu\AppData\Local\Programs\Python\Python37-32\lib\site-packages\urllib3\__init__.py", line 8, in <module>
    from .connectionpool import (
  File "C:\Users\mpalu\AppData\Local\Programs\Python\Python37-32\lib\site-packages\urllib3\connectionpool.py", line 3, in <module>
    import logging ....
 AttributeError: 'str' object has no attribute 'items' </code>    

如前所述,我只是想打包这个程序,这样办公室里的人就可以使用它,而不必安装 python 和所有的包(这里没有人精通计算机)和使用批处理文件运行 程序。

enum34 is a back-ported library for the enum type introduced in python3.4, see PEP435 and maybe this SO post。但是既然你是运行python3.7,这个依赖就不可能正确。

显然,smartsheet 开发人员已经知道此问题并提供了修复程序。参见 this issue description and the fixing commit。升级 smartsheet 可能会解决您的问题。

pip install smartsheet-python-sdk --upgrade

如果通过 pip 还没有最新版本,您可以从源安装它:

# Clone the repository
git clone https://github.com/smartsheet-platform/smartsheet-python-sdk.git
# As of now (Jan 2019), the fix has not been merged to master yet.
# Hence, directly clone the patch branch:
# git clone -b tw-updates-2.0 https://github.com/smartsheet-platform/smartsheet-python-sdk.git
cd smartsheet-python-sdk
# Install the module.
python setup.py install