Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 运行由pyinstaller生成的exe文件时出错_Python_Pyinstaller_Python Vlc - Fatal编程技术网

Python 运行由pyinstaller生成的exe文件时出错

Python 运行由pyinstaller生成的exe文件时出错,python,pyinstaller,python-vlc,Python,Pyinstaller,Python Vlc,我试着用我的python脚本制作一个独立的可执行文件,它基本上为用pyinstaller创建可执行文件提供了简单的界面,所以我制作了我的python脚本的exe,它是基于控制台的,当我试着运行我用脚本制作的exe时,控制台打开了一秒钟,很快就关闭了一堆错误。但是,脚本在空闲状态下运行良好。 我附上了我收到的错误截图。根据我的观察,错误很可能是由于导入VLC模块而发生的,正如在错误跟踪中,您将看到它发生在第2行和我导入VLC的那一行。通过更改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