Python 运行由pyinstaller生成的exe文件时出错
我试着用我的python脚本制作一个独立的可执行文件,它基本上为用pyinstaller创建可执行文件提供了简单的界面,所以我制作了我的python脚本的exe,它是基于控制台的,当我试着运行我用脚本制作的exe时,控制台打开了一秒钟,很快就关闭了一堆错误。但是,脚本在空闲状态下运行良好。 我附上了我收到的错误截图。根据我的观察,错误很可能是由于导入VLC模块而发生的,正如在错误跟踪中,您将看到它发生在第2行和我导入VLC的那一行。通过更改VLC导入的行号,我也观察到了这一点。 我是个初学者,所以我需要知道解决方法的步骤。 下面是完整的错误跟踪Python 运行由pyinstaller生成的exe文件时出错,python,pyinstaller,python-vlc,Python,Pyinstaller,Python Vlc,我试着用我的python脚本制作一个独立的可执行文件,它基本上为用pyinstaller创建可执行文件提供了简单的界面,所以我制作了我的python脚本的exe,它是基于控制台的,当我试着运行我用脚本制作的exe时,控制台打开了一秒钟,很快就关闭了一堆错误。但是,脚本在空闲状态下运行良好。 我附上了我收到的错误截图。根据我的观察,错误很可能是由于导入VLC模块而发生的,正如在错误跟踪中,您将看到它发生在第2行和我导入VLC的那一行。通过更改VLC导入的行号,我也观察到了这一点。 我是个初学者,所
`Traceback (most recent call last):
File "site-packages\PyInstaller\loader\pyiboot01_bootstrap.py", line 149, in _
_init__
File "ctypes\__init__.py", line 348, in __init__
OSError: [WinError 126] The specified module could not be found
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "liveyoutbe.py", line 2, in <module>
File "<frozen importlib._bootstrap>", line 961, in _find_and_load
File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
File "c:\python36\lib\site-packages\PyInstaller\loader\pyimod03_importers.py",
line 627, in exec_module
exec(bytecode, module.__dict__)
File "site-packages\vlc.py", line 207, in <module>
File "site-packages\vlc.py", line 163, in find_lib
File "site-packages\PyInstaller\loader\pyiboot01_bootstrap.py", line 151, in _
_init__
__main__.PyInstallerImportError: Failed to load dynlib/dll 'libvlc.dll'. Most pr
obably this dynlib/dll was not found when the application was frozen.
[6032] Failed to execute script liveyoutbe`
PythonVLC需要外部依赖项,如您在错误中看到的DLL文件。因此,您需要使用将它们添加到可执行输出中 只需将当前VLC安装路径(例如C:\Program Files\VideoLAN\VLC)中的所有*.dll复制到脚本中,然后使用以下命令生成可执行文件:
pyinstaller.exe -F --add-data "./libvlc.dll;." --add-data "./axvlc.dll;." --add-data "./libvlccore.dll;." --add-data "./npvlc.dll;." script.py
编辑:看来您还需要一个依赖项,即插件目录。只需将VLC路径中的整个插件目录添加到可执行输出中。为此,在执行上述命令后,您将获得一个spec文件add a.datas+=Tree,prefix='plugins',如下所示:
# -*- mode: python -*-
block_cipher = None
a = Analysis(['script.py'],
pathex=['<root_project_path>'],
binaries=[],
datas=[('./libvlc.dll', '.'), ('./axvlc.dll', '.'), ('./libvlccore.dll', '.'), ('./npvlc.dll', '.')],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
a.datas += Tree('<path_to_vlc_plugins_dir>', prefix='plugins')
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='script',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
runtime_tmpdir=None,
console=True )
请发布您的代码并在cmd中打开exe,并将回溯作为文本放在此处。我已编辑了问题并添加了代码以及错误跟踪,请帮助我是初学者嘿,正如您所说,我试图添加所有必需的文件并生成exe。但当我运行可执行文件时,它运行了一段时间,同时执行了程序的一半,并再次以错误C:\Users\intel\Desktop>liveyoutbe.exe结束https://www.youtube.com/watch?v=9vMh9f41pqE https://www.youtube.com/watch?v=jVrB_vfS3AQ 回溯最近一次调用:文件liveyoutbe.py,第34行,在player=ins.media\u player\u new AttributeError:“NoneType”对象没有属性“media\u player\u new”[5172]无法执行脚本liveyoutbea,程序似乎运行了一段时间,但coludn现在仍然无法导入vlc模块!我测试了这个答案,并为我工作。请记住,此解决方案仅用于导入VLC。但是你的代码似乎有错误,这意味着这是一个不同的问题。谢谢!!现在它工作得很好,在添加了我在网上搜索的dll文件后,我发现我也需要添加VLC的plugins文件夹和您在答案中描述的相同,所以我没有修改spec文件,而是使用-add data这样做,最后代码是高的。再次感谢你节省了我的时间。我完全是confused@Kartikeya如果已经安装,PyInstaller将使用它压缩可执行文件。
# -*- mode: python -*-
block_cipher = None
a = Analysis(['script.py'],
pathex=['<root_project_path>'],
binaries=[],
datas=[('./libvlc.dll', '.'), ('./axvlc.dll', '.'), ('./libvlccore.dll', '.'), ('./npvlc.dll', '.')],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
a.datas += Tree('<path_to_vlc_plugins_dir>', prefix='plugins')
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='script',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
runtime_tmpdir=None,
console=True )
pyinstaller script.spec