繁体   English   中英

如何在没有此错误的情况下将 python 文件转换为 exe 文件

[英]How can I turn a python file into a exe file withou this error

嗯,我在做一个个人项目,对于这个项目,我需要每次在电脑上运行一个python脚本,并且这个脚本需要在电脑开机的情况下启动,为此我使用了PyInstaller打开脚本“.exe”文件,但显示错误。 Python 代码,文件名; “teste.py”:

import pynotifier

pynotifier.Notification(
    "TESTE",  # Translate: Test
    "ISSO É APENAS UM TESTE",  # Translate: This is just a test
    6
).send()

这段代码只是告诉我一个通知,我用这段代码把它变成了一个“.exe”文件:

pyinstaller --onefile --nowindowed teste.py

当我执行它时,将 python 文件正常转换为 exe 文件,但是当我执行它时,它向我显示以下消息:

Exception in thread Thread-1:
Traceback (most recent call last):
  File "threading.py", line 917, in _bootstrap_inner
  File "threading.py", line 865, in run
  File "win10toast\__init__.py", line 93, in _show_toast
  File "pkg_resources\__init__.py", line 1144, in resource_filename
  File "pkg_resources\__init__.py", line 357, in get_provider      
  File "pkg_resources\__init__.py", line 900, in require
  File "pkg_resources\__init__.py", line 786, in resolve
pkg_resources.DistributionNotFound: The 'win10toast' distribution was not found and is required by the application

有关更多信息,这是 PyNotifier 模块中的代码,因为它没有关于 web 的文档:

初始化.py 文件:

from .pynotifier import Notification

版本.py 文件:

VERSION = (0, 1, 1)
__version__ = '.'.join(map(str, VERSION))

pynotifier.py 文件:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# PyNotifier
# Copyright (c) 2018 Yuriy Lisovskiy
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

__all__ = ['Notification']

# standard library
import platform


# class to run notification
class Notification:

    # urgency level
    URGENCY_LOW = 'low'
    URGENCY_NORMAL = 'normal'
    URGENCY_CRITICAL = 'critical'

    # 'title' - a title of notification
    # 'description' - more info about the notification
    # 'duration' - notification timeout in seconds
    # 'urgency' - notification urgency level
    # 'icon_path' - path to notification icon file
    def __init__(self, title, description, duration=5, urgency=URGENCY_LOW, icon_path=None):
        if urgency not in [self.URGENCY_LOW, self.URGENCY_NORMAL, self.URGENCY_CRITICAL]:
            raise ValueError('invalid urgency was given: {}'.format(urgency))
        self.__WINDOWS = 'Windows'
        self.__LINUX = 'Linux'
        self.__title = title
        self.__description = description
        self.__duration = duration
        self.__urgency = urgency
        self.__icon_path = icon_path
        self.__is_windows = False

    # 'send' - sends notification depending on system
    def send(self):
        system = platform.system()
        if self.__LINUX in system:
            self.__send_linux()
        elif self.__WINDOWS in system:
            self.__send_windows()
        else:
            raise SystemError('notifications are not supported for {} system'.format(system))

    # '__send_linux' - sends notification if running on Linux system
    def __send_linux(self):
        import subprocess
        command = [
            'notify-send', '{}'.format(self.__title),
            '{}'.format(self.__description),
            '-u', self.__urgency,
            '-t', '{}'.format(self.__duration * 1000)
        ]
        if self.__icon_path is not None:
            command += ['-i', self.__icon_path]
        subprocess.call(command)

    # '__send_windows' - sends notification if running on Windows system
    def __send_windows(self):
        try:
            import win10toast
            win10toast.ToastNotifier().show_toast(
                threaded=True,
                title=self.__title,
                msg=self.__description,
                duration=self.__duration,
                icon_path=self.__icon_path
            )
        except ImportError:
            raise ImportError('notifications are not supported, can\'t import necessary library')

请帮帮我:|

试试这个图书馆的

import plyer.platforms.win.notification
from plyer import notification

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM