将python文件转换为exe后找不到文件错误

时间:2019-11-04 23:04:47

标签: python sharepoint pyinstaller

我有用于SharePoint登录的python脚本(使用python office365-rest-python-client)并下载了文件。我想将脚本转换为可执行文件,以便可以与非技术人员共享。 Python代码运行良好,但是当我使用Pyinstaller将其转换为exe并尝试运行时,它给了我FileNotFoundError。

我对python比较陌生,我尝试了在线找到的一对教程和解决方案,但是没有运气。任何建议,将不胜感激。

谢谢!

Traceback (most recent call last):
  File "test.py", line 107, in <module>
  File "test.py", line 35, in SPLogin
  File "site-packages\office365\runtime\auth\authentication_context.py", line 18, in acquire_token_for_user
  File "site-packages\office365\runtime\auth\saml_token_provider.py", line 57, in acquire_token
  File "site-packages\office365\runtime\auth\saml_token_provider.py", line 82, in acquire_service_token
  File "site-packages\office365\runtime\auth\saml_token_provider.py", line 147, in prepare_security_token_request
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\foo\\AppData\\Local\\Temp\\_MEI66362\\office365\\runtime\\auth\\SAML.xml'
[6664] Failed to execute script test

请参阅以下规格文件。

SAML.xml位置:C:\ Users \ Foo \ AppData \ Local \ Programs \ Python \ Python37-32 \ Lib \ site-packages \ office365 \ runtime \ auth \ SAML.xml

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(['test.py'],
             pathex=['C:\\Users\\Foo\\Downloads\\sptest\\newbuild'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=['.'],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='test',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=True )

2 个答案:

答案 0 :(得分:1)

创建SAML.xml的副本(在我的测试用例中,就在我的python脚本test0.py旁边);您可以从this page复制/粘贴。然后运行:

pyinstaller --onefile --add-data "SAML.xml;office365/runtime/auth" test0.py

答案 1 :(得分:0)

当您执行创建的_MEI66362 Pyinstaller时,将创建.exe文件夹。它包含Pyinstaller确定的应用程序所需的所有内容。但是,它不能推断出您的应用程序需要的每个文件。在某些情况下,您必须告知Pyinstaller所需的资源。您可以使用-add-data--add-binary选项(或datas文件中的binaries.spec类成员)。请参阅文档herehere

datas=语句中,第二个参数是文件应保存在可执行文件中的位置。因此,您必须将其放置在saml_token_provider.py查找文件夹中。我认为您应该使用类似datas=[ ('/pathtofolder/SAML.xml', 'office365/runtime/auth') ],的东西。