我写了一个小程序,它生成一个系统托盘图标,可以播放来自几个电台的广播流。它运行良好一年了,我尝试更新代码以及如何使用pyinstaller
. 我的目标是让它通常非常易于使用。
在这样做的同时,我使用 PyCharmpython 3.9
作为解释器建立了一个新的开发环境。我遇到了一些问题。这实际上很好,因为我想复制从头开始编译它的过程。
使用pip
,我安装pywin32
并python-vlc
在venv
.
我还安装了一个 64 位版本的vlc
in C:\Program Files\VLC Plus Player
(这似乎是新的标准路径)。
现在我有两个问题。尽管dll
我努力使用add_dll_directory
. 当我最初使用早期版本的 Python 编写程序时,我不必这样做。(也许我PATH
在 Windows 中设置了。)我现在想重写程序,这样就不必再做任何更改了。
另外,我想让程序独立,无需为VLC
用户安装。有一个 14 年的线程表明它可能包含 VLC itelf。如果可能的话,任何评论都非常受欢迎!
到目前为止,我试图将dll
's 放入我的工作目录中。这将消除第一个问题。但是然后self.vlc = vlcimp.Instance()
会返回None
,可能是因为没有真正VLC
可以返回的东西。
import sys
import win32ui
import os
os.add_dll_directory(r'C:\Program Files\VLC Plus Player')
import vlc as vlcimp
import win32api
import win32con
import win32gui_struct
import threading
import webbrowser
try:
import winxpgui as win32gui
except ImportError:
import win32gui
class SysTrayIcon(object):
QUIT = 'QUIT'
STOP = 'STOP'
SPECIAL_ACTIONS = [STOP, QUIT]
FIRST_ID = 1023
def __init__(self,
icon,
hover_text,
menu_options,
menu_options2,
on_quit=None,
default_menu_index=None,
window_class_name=None,):
self.button_doubleclicked = False
self.playing = None
self.playingID = ''
self.toggle = False
self.vlc = vlcimp.Instance()
self.player = self.vlc.media_player_new()
self.icon = icon
self.hover_text = hover_text
self.on_quit = on_quit
self.menu = None
找不到时的异常dll
是:
Traceback (most recent call last):
File "C:\Users\....py", line 22, in <module>
import vlc as vlcimp
File "C:\Users\...\venv\lib\site-packages\vlc.py", line 210, in <module>
dll, plugin_path = find_lib()
File "C:\Users\...\venv\lib\site-packages\vlc.py", line 170, in find_lib
dll = ctypes.CDLL('.\\' + libname)
File "C:\Users\...\AppData\Local\Programs\Python\Python39\lib\ctypes\__init__.py", line 374, in __init__
self._handle = _dlopen(self._name, mode)
FileNotFoundError: Could not find module 'C:\Users\...WORKING_DIRECTORY\libvlc.dll' (or one of its dependencies). Try using the full path with constructor syntax.
Process finished with exit code 1