Xlwings 模块导致 PyInstaller EXE 抛出异常
Xlwings module causes PyInstaller EXE to throw exception
我正在尝试使用 pyinstaller
冻结名为 test.py 的简单 Python 3.4 脚本。该脚本导入 0.7.0 版的 xlwings
模块(我通过 pip
安装),然后打印一条消息。
import xlwings
print("Fine!")
如果我删除 xlwings
导入,那么 pyinstaller test.py
会在 dist 中生成一个 EXE(我在 Windows 10)打印 "Fine" 消息然后退出的文件夹。但是,如果我导入 xlwings
模块,该命令会生成一个打印此消息然后退出的 EXE(不打印 "Fine" 消息):
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1191, in _load_unlocked
File "<frozen importlib._bootstrap>", line 1161, in _load_backward_compatible
File "C:\Python34\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
exec(bytecode, module.__dict__)
File "site-packages\xlwings\__init__.py", line 20, in <module>
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1191, in _load_unlocked
File "<frozen importlib._bootstrap>", line 1161, in _load_backward_compatible
File "C:\Python34\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
exec(bytecode, module.__dict__)
File "site-packages\xlwings\_xlwindows.py", line 29, in <module>
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1191, in _load_unlocked
File "<frozen importlib._bootstrap>", line 1161, in _load_backward_compatible
File "C:\Python34\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
exec(bytecode, module.__dict__)
File "site-packages\pandas\__init__.py", line 7, in <module>
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1191, in _load_unlocked
File "<frozen importlib._bootstrap>", line 1161, in _load_backward_compatible
File "C:\Python34\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 573, in load_module
module = loader.load_module(fullname)
File "pandas\tslib.pyx", line 55, in init pandas.tslib (pandas\tslib.c:102924)
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1191, in _load_unlocked
File "<frozen importlib._bootstrap>", line 1161, in _load_backward_compatible
File "C:\Python34\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
exec(bytecode, module.__dict__)
File "dateutil\zoneinfo\__init__.py", line 31, in <module>
File "dateutil\zoneinfo\__init__.py", line 24, in getzoneinfofile
FileNotFoundError: [WinError 3] The system cannot find the path specified: 'C:\Users\OrangeFlash81\AppData\Local\Temp\_MEI102122\dateutil\zoneinfo'
test returned -1
我知道 cx_Freeze
在导入 dateutil
时有问题,此错误消息引用了 dateutil
。 pyinstaller
是否遇到同样的问题,如果是,我该如何解决?
这不完全是一个解决方案,但我决定改用 XLRD
模块,它可以完成我需要的一切,并且可以完美地与 pyinstaller
一起工作;更改 xlwings
代码以使用 XLRD
也不是太困难。
我正在尝试使用 pyinstaller
冻结名为 test.py 的简单 Python 3.4 脚本。该脚本导入 0.7.0 版的 xlwings
模块(我通过 pip
安装),然后打印一条消息。
import xlwings
print("Fine!")
如果我删除 xlwings
导入,那么 pyinstaller test.py
会在 dist 中生成一个 EXE(我在 Windows 10)打印 "Fine" 消息然后退出的文件夹。但是,如果我导入 xlwings
模块,该命令会生成一个打印此消息然后退出的 EXE(不打印 "Fine" 消息):
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1191, in _load_unlocked
File "<frozen importlib._bootstrap>", line 1161, in _load_backward_compatible
File "C:\Python34\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
exec(bytecode, module.__dict__)
File "site-packages\xlwings\__init__.py", line 20, in <module>
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1191, in _load_unlocked
File "<frozen importlib._bootstrap>", line 1161, in _load_backward_compatible
File "C:\Python34\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
exec(bytecode, module.__dict__)
File "site-packages\xlwings\_xlwindows.py", line 29, in <module>
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1191, in _load_unlocked
File "<frozen importlib._bootstrap>", line 1161, in _load_backward_compatible
File "C:\Python34\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
exec(bytecode, module.__dict__)
File "site-packages\pandas\__init__.py", line 7, in <module>
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1191, in _load_unlocked
File "<frozen importlib._bootstrap>", line 1161, in _load_backward_compatible
File "C:\Python34\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 573, in load_module
module = loader.load_module(fullname)
File "pandas\tslib.pyx", line 55, in init pandas.tslib (pandas\tslib.c:102924)
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1191, in _load_unlocked
File "<frozen importlib._bootstrap>", line 1161, in _load_backward_compatible
File "C:\Python34\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
exec(bytecode, module.__dict__)
File "dateutil\zoneinfo\__init__.py", line 31, in <module>
File "dateutil\zoneinfo\__init__.py", line 24, in getzoneinfofile
FileNotFoundError: [WinError 3] The system cannot find the path specified: 'C:\Users\OrangeFlash81\AppData\Local\Temp\_MEI102122\dateutil\zoneinfo'
test returned -1
我知道 cx_Freeze
在导入 dateutil
时有问题,此错误消息引用了 dateutil
。 pyinstaller
是否遇到同样的问题,如果是,我该如何解决?
这不完全是一个解决方案,但我决定改用 XLRD
模块,它可以完成我需要的一切,并且可以完美地与 pyinstaller
一起工作;更改 xlwings
代码以使用 XLRD
也不是太困难。