1

我写了一个小程序,它生成一个系统托盘图标,可以播放来自几个电台的广播流。它运行良好一年了,我尝试更新代码以及如何使用pyinstaller. 我的目标是让它通常非常易于使用。

在这样做的同时,我使用 PyCharmpython 3.9作为解释器建立了一个新的开发环境。我遇到了一些问题。这实际上很好,因为我想复制从头开始编译它的过程。

使用pip,我安装pywin32python-vlcvenv.

我还安装了一个 64 位版本的vlcin 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

4

0 回答 0