我有一个名为3.7
的python(版本test.py
)文件,我想使用test.exe
转换为pyinstaller
。当我使用命令
pyinstaller test.py
它正在成功创建test.exe
。但是,当我尝试使用命令提示符执行test.exe
文件时,出现以下错误:
"Traceback (most recent call last):
File "test.py", line 1, in <module>
File "c:\users\user1\anaconda3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 627, in exec_module
exec(bytecode, module.__dict__)
File "site-packages\rasterio\__init__.py", line 29, in <module>
ImportError: DLL load failed: The specified module could not be found.
[460] Failed to execute script test"
浏览了网站上的类似帖子后,我尝试了以下不同的选择:
(i)第一种选择:在路径C:\Users\user1\Anaconda3\Lib\site-packages\PyInstaller\hooks
中添加了一个包含hook-rasterio.py
的{{1}},然后尝试了
hiddenimports=['rasterio', 'rasterio._shim']
但仍然出现上述错误。
(ii)第二个选择:在pyinstaller -F test.py
的{{1}}文件中,我添加了test.spec
和hiddenimports=[]
,然后使用rasterio
创建了rasterio._shim
但问题仍然存在。
我的test.exe
如下:
pyinstaller
任何人都可以提出解决问题的必要建议。
答案 0 :(得分:0)
rasterio
是一个复杂的库,它依赖于许多外部库。您的错误是DLL加载错误,这意味着它缺少rasterio
所需的某些DLL文件。建议您按照here中的安装过程进行操作,并确保已正确安装rasterio
和conda环境(为此使用新的环境)。
下一步,检查rasterio
是否已导入,例如:
import traceback
try:
import rasterio
print("Import OK!")
except ImportError:
print("Import Error!")
traceback.print_exc()
input()
下一步,安装PyInstaller并使用以下规格文件:
# -*- mode: python -*-
block_cipher = None
a = Analysis(['test.py'],
pathex=['C:\\Users\\Masoud\\Desktop\\test'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
a.datas += Tree('C:\\Users\\Masoud\\Anaconda3\\envs\\testEnv\\Lib\\site-packages\\rasterio\\', prefix='rasterio')
a.datas += Tree('C:\\Users\\Masoud\\Anaconda3\\envs\\testEnv\\Lib\\xml', prefix='xml')
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=False,
runtime_tmpdir=None,
console=True )
在上面的脚本中,我将整个rasterio
和xml
库带到可执行文件中,因为PyInstaller无法解析模块导入。请记住要根据您的设置更改路径。
最后,使用以下命令生成可执行文件:
pyinstaller test.spec