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'))和另外两个文件到工作目录解决了我的问题,谢谢!