Python &引用;导入错误:DLL加载失败";转换时";。py文件";(具有“导入光栅”到“导入光栅”);。exe文件";使用pyinstaller
我有一个名为Python &引用;导入错误:DLL加载失败";转换时";。py文件";(具有“导入光栅”到“导入光栅”);。exe文件";使用pyinstaller,python,pyinstaller,rasterio,Python,Pyinstaller,Rasterio,我有一个名为test.py的python(版本3.7)文件,我想使用pyinstaller将其转换为test.exe。当我使用命令时 pyinstaller test.py 它正在成功创建test.exe。但是,当我试图使用命令提示符执行test.exe文件时,出现以下错误: “回溯(最近一次呼叫最后一次): 文件“test.py”,第1行,在 exec_模块中的文件“c:\users\user1\anaconda3\lib\site packages\PyInstaller\loader\p
test.py
的python(版本3.7
)文件,我想使用pyinstaller
将其转换为test.exe
。当我使用命令时
pyinstaller test.py
它正在成功创建test.exe
。但是,当我试图使用命令提示符执行test.exe
文件时,出现以下错误:
“回溯(最近一次呼叫最后一次):
文件“test.py”,第1行,在
exec_模块中的文件“c:\users\user1\anaconda3\lib\site packages\PyInstaller\loader\pyimod03_importers.py”,第627行
exec(字节码、模块、指令)
文件“site packages\rasterio\\uuuuu init\uuuuuu.py”,第29行,在
ImportError:DLL加载失败:找不到指定的模块。
[460]无法执行脚本测试“
在浏览了网站上类似的帖子后,我尝试了不同的选择,如:
(i) 第一个选项:在路径C:\Users\user1\Anaconda3\Lib\site packages\PyInstaller\hooks
中,我添加了一个hook rasterio.py
包含hiddenimports=['rasterio','rasterio.\u shim']
,然后尝试
pyinstaller-F test.py
但我还是得到了上面的错误
(ii)第二个选项:在hiddenimports=[]
中的test.spec
文件中,我添加了rasterio
和rasterio.\u shim
然后使用pyinstaller
创建test.exe
,但问题仍然存在
我的test.py
看起来像:
导入光栅
打印(“完成了…”)
任何人都可以提出解决问题所需的建议。
rasterio
是一个复杂的库,它依赖于许多外部库。您的错误是DLL加载错误,这意味着它缺少光栅所需的某些DLL文件。我建议您按照中的安装过程进行操作,并确保您已在conda环境中正确安装了rasterio
(为此使用新的环境)
接下来,检查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
你好,马苏德。谢谢你的回复。我想通知您,“导入光栅”在我的python环境中运行良好。我想向您确认“光栅&xml”的路径是否应为“C:\\Users\\user1\\Anaconda3\\envs\\test\\Lib\\site packages\\rasterio\\”和“C:\\Users\\user1\\Anaconda3\\envs\\test\\Lib\\xml”,在我的例子中,rasterio文件夹不存在于上述路径中,而xml文件夹则存在于上述路径中。在我的例子中,rasterio存在于“C:\\Users\\user1\\Anaconda3\\Lib\\site packages\\rasterio\\”中,xml也存在于“C:\\Users\\ashish\\Anaconda3\\Lib\\xml”中。此外,当我在上述规范文件中使用此新路径,然后使用pyinstaller生成exe时,问题仍然存在。因此,您可以友好地确认和建议。您需要替换三条路径:1。如您所述,xml和光栅的两个树
路径。2. pathex
这是项目的根路径。请记住,我从上面的链接安装了最新版本的rasterio。对于pathex,我使用了“C:\\Users\\user1\\Desktop\\New folder\\test\\”。而对于rasterio,我使用了“C:\\Users\\user1\\Anaconda3\\envs\\test\\Lib\\site packages\\rasterio\”,对于xml,我使用了“C:\\Users\\user1\\Anaconda3\\envs\\test\\Lib\\xml”,然后使用了“pyinstaller test.spec”,但在从命令提示符运行exe文件后,我仍然收到了相同的错误“导入错误:DLL加载失败:找不到指定的模块。[460]无法执行脚本测试“将这两行添加到规范文件中: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',前缀='xml'))和另外两个文件到工作目录解决了我的问题,谢谢!