ModuleNotFoundError:没有名为“ win32serviceutil”的模块

时间:2019-11-26 09:38:14

标签: python python-3.x windows

我有一个可以作为Windows服务安装的项目,但是我很难完成它。

Venv已为此项目安装了 pywin32 软件包(版本227)。但是,当我尝试使用以下命令从控制台运行python文件时:

import win32serviceutil

我遇到以下错误:

  

ModuleNotFoundError:没有名为“ win32”的模块

我尝试过的事情:

  • 重新安装软件包,并使用python -m pip install pywin32重新安装
  • 将导入方式更改为:

    from win32 import win32serviceutil from win32.lib import win32serviceutil import win32.lib.win32serviceutil as win32serviceutil

  • 来自this thread

  • 的答案

win32被PyCharm识别为文件夹:

enter image description here

奇怪的是,我可以运行以下命令并安装Windows服务:

python MyPythonFile.py install

它不返回任何错误。但是尝试使用以下命令启动服务:

python MyPythonFile.py start

返回:

  

“错误1053:服务没有及时响应启动或控制请求”

在调试模式python MyPythonFile.py debug中,它返回:

  

ModuleNotFoundError:没有名为“ win32serviceutil”的模块

2 个答案:

答案 0 :(得分:0)

此线程的解决方案有效: Using PythonService.exe to host python service while using virtualenv

我用来解析它的代码:

import os
import sys

service_directory = os.path.dirname(__file__)
source_directory = os.path.abspath(service_directory)
os.chdir(source_directory)
venv_base = os.path.abspath(os.path.join(source_directory, "..", "..", "venv"))
sys.path.append(".")
old_os_path = os.environ['PATH']
os.environ['PATH'] = os.path.join(venv_base, "Scripts")+ os.pathsep + old_os_path
site_packages = os.path.join(venv_base, "Lib", "site-packages")
prev_sys_path = list(sys.path)
import site
site.addsitedir(site_packages)
sys.real_prefix = sys.prefix
sys.prefix = venv_base
new_sys_path = list()
for item in list(sys.path):
    if item not in prev_sys_path:
        new_sys_path.append(item)
        sys.path.remove(item)
sys.path[:0] = new_sys_path

此代码必须在导入错误之前运行

答案 1 :(得分:0)

干得好:)

要使其与我配合使用,我必须更改下面一行中反映的虚拟env文件夹的路径,以指向我的venv文件夹

从这里: venv_base = os.path.abspath(os.path.join(source_directory, "..", "..", "venv"))

对此: venv_base = os.path.abspath(os.path.join(source_directory, "..", "..", "venv"))