我有用于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 )
答案 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
类成员)。请参阅文档here和here。
在datas=
语句中,第二个参数是文件应保存在可执行文件中的位置。因此,您必须将其放置在saml_token_provider.py
查找文件夹中。我认为您应该使用类似datas=[ ('/pathtofolder/SAML.xml', 'office365/runtime/auth') ],
的东西。