Bagaimana Anda menjalankan skrip Python sebagai layanan di Windows?

260

Saya membuat sketsa arsitektur untuk satu set program yang berbagi berbagai objek yang saling terkait yang disimpan dalam database. Saya ingin salah satu program untuk bertindak sebagai layanan yang menyediakan antarmuka tingkat yang lebih tinggi untuk operasi pada objek ini, dan program lain untuk mengakses objek melalui layanan itu.

Saat ini saya bertujuan untuk kerangka Python dan Django sebagai teknologi untuk mengimplementasikan layanan itu. Saya cukup yakin menemukan cara untuk mengubah program Python di Linux. Namun, ini adalah item spesifikasi opsional yang harus didukung sistem Windows. Saya memiliki sedikit pengalaman dengan pemrograman Windows dan tidak memiliki pengalaman sama sekali dengan layanan Windows.

Apakah mungkin menjalankan program Python sebagai layanan Windows (mis. Jalankan secara otomatis tanpa login pengguna)? Saya tidak perlu harus mengimplementasikan bagian ini, tetapi saya perlu ide kasar bagaimana hal itu akan dilakukan untuk memutuskan apakah akan merancang sepanjang garis ini.

Sunting: Terima kasih atas semua jawaban sejauh ini, mereka cukup komprehensif. Saya ingin tahu satu hal lagi: Bagaimana Windows mengetahui layanan saya? Bisakah saya mengelolanya dengan utilitas Windows asli? Apa yang setara dengan menempatkan skrip start / stop di /etc/init.d?

Hanno Fietz
sumber
2
Periksa templat Windows Service ini menggunakan win32service API .
CMS

Jawaban:

254

Ya kamu bisa. Saya melakukannya menggunakan pustaka pythoncom yang disertakan dengan ActivePython atau dapat diinstal dengan pywin32 (Python untuk ekstensi Windows).

Ini adalah kerangka dasar untuk layanan sederhana:

import win32serviceutil
import win32service
import win32event
import servicemanager
import socket


class AppServerSvc (win32serviceutil.ServiceFramework):
    _svc_name_ = "TestService"
    _svc_display_name_ = "Test Service"

    def __init__(self,args):
        win32serviceutil.ServiceFramework.__init__(self,args)
        self.hWaitStop = win32event.CreateEvent(None,0,0,None)
        socket.setdefaulttimeout(60)

    def SvcStop(self):
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        win32event.SetEvent(self.hWaitStop)

    def SvcDoRun(self):
        servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
                              servicemanager.PYS_SERVICE_STARTED,
                              (self._svc_name_,''))
        self.main()

    def main(self):
        pass

if __name__ == '__main__':
    win32serviceutil.HandleCommandLine(AppServerSvc)

Kode Anda akan masuk dalam main()metode — biasanya dengan semacam infinite loop yang mungkin terputus dengan memeriksa flag, yang Anda atur di dalam SvcStopmetode

Ricardo Reyes
sumber
21
Setelah mengkode ini, bagaimana cara saya memberi tahu Windows untuk menjalankan ini sebagai layanan?
Kit
33
@Kit: jalankan skrip Anda dengan dari dari baris perintah dengan parameter "instal". Kemudian Anda akan dapat melihat aplikasi Anda di daftar Layanan Windows, di mana Anda dapat memulainya, menghentikannya, atau mengaturnya untuk memulai secara otomatis
Ricardo Reyes
16
Anda memberi perhatian khusus ke pythoncom, dan Anda mengimpornya dalam kode contoh Anda. Masalahnya adalah Anda tidak pernah benar-benar menggunakan pythoncom di mana pun dalam kode contoh Anda, Anda hanya mengimpornya. Mengapa memberikannya perhatian khusus dan kemudian tidak menunjukkan penggunaannya?
Buttons840
10
Mengapa demikian socket.setdefaulttimeout(60)? Apakah diperlukan untuk layanan, atau hanya disalin dari layanan yang ada? :)
Timur
7
chrisumbel.com/article/windows_services_in_python Yang ini adalah contoh serupa tetapi lebih lengkap
csprabala
41

Meskipun saya memilih jawaban yang dipilih beberapa minggu yang lalu, sementara itu saya banyak berjuang dengan topik ini. Rasanya seperti memiliki instalasi Python khusus dan menggunakan modul khusus untuk menjalankan skrip karena layanan hanyalah cara yang salah. Bagaimana dengan portabilitas dan semacamnya?

Saya menemukan Service Manager yang luar biasa , yang membuatnya sangat sederhana dan waras untuk berurusan dengan Layanan Windows. Saya pikir karena saya bisa meneruskan opsi ke layanan yang diinstal, saya bisa juga memilih Python saya yang dapat dieksekusi dan meneruskan skrip saya sebagai opsi.

Saya belum mencoba solusi ini, tetapi saya akan melakukannya sekarang dan memperbarui pos ini sepanjang proses. Saya juga tertarik menggunakan virtualenvs di Windows, jadi saya mungkin akan membuat tutorial cepat atau lambat dan tautan ke sini.

mknaf
sumber
Keberuntungan? Saya sedang membangun situs yang sangat sederhana untuk klien dan tidak perlu menggunakan seluruh tumpukan Apache. Membangun layanan sendiri juga terdengar seperti undangan untuk masalah, seperti yang saya baca dari komentar lain.
Jaran
Ya, ini berfungsi dan sangat mudah dilakukan. Anda cukup memberikan path dan argumen untuk skrip. Saya bisa menjalankannya tanpa konsol untuk berjaga-jaga kalau-kalau ada orang yang akhirnya memiliki jendela konsol.
kmcguire
Meskipun ini tampaknya berhasil, ada kesulitan lain terutama ketika Anda "tidak perlu menggunakan seluruh tumpukan Apache": gunicorn misalnya belum berjalan di Windows, yang sebenarnya merupakan penghenti bagi saya.
mknaf
4
Kuncinya di sini adalah menjalankan python.exe sebagai layanan dan skrip python Anda sebagai parameter: seperti "instal nssm MyServiceName c: \ python27 \ python.exe c: \ temp \ myscript.py"
poleguy
Bagus sekali! Pada sistem dengan beberapa lingkungan virtual, lintasan dapat mereferensikan exe interpreter Python di direktori Scripts dari lingkungan virtual yang diinginkan. Sepertinya new-servicedi PowerShell harus dapat melakukan ini, tetapi memulai (dan memonitor) skrip sebagai layanan jelas melibatkan lebih banyak detail, yang nssm merawatnya dengan sangat baik.
Fred Schleifer
26

Cara paling sederhana adalah dengan menggunakan: NSSM - Non-Sucking Service Manager:

1 - buat unduhan di https://nssm.cc/download

2 - instal program python sebagai layanan: Win prompt as admin

c:> instal nssm.exe, WinService

3 - Di konsol NSSM:

jalur: C: \ Python27 \ Python27.exe

Direktori startup: C: \ Python27

Argumen: c: \ WinService.py

4 - periksa layanan yang dibuat pada services.msc

Adriano RPL
sumber
Saya dulu menggunakan nssm.exe menginstal Visual Studio C ++ .exe sebagai layanan, dan sekarang saya dapat menggunakan nssm.exe juga untuk Python .pyc sebagai layanan. Terima kasih.
etoricky
Catatan: jika skrip * .py Anda terletak di folder dengan spasi (mis: C: \ Program Files \ myapp.py) perlu menentukan argumen dalam tanda kutip: Argumen: "C: \ Program Files \ myapp.py"
Yury Kozlov
Bagaimana cara menyediakan lingkungan virtual?
shaik moeed
24

Cara termudah untuk mencapai ini adalah dengan menggunakan perintah asli sc.exe:

sc create PythonApp binPath= "C:\Python34\Python.exe --C:\tmp\pythonscript.py"

Referensi:

  1. https://technet.microsoft.com/en-us/library/cc990289(v=ws.11).aspx
  2. Saat membuat layanan dengan sc.exe bagaimana cara mengirimkan parameter konteks?
pemilik rumah
sumber
Saya pikir, ini masalah dengan perintah atau aplikasi Anda sendiri. Pokoknya, periksa dukungan
ini.microsoft.com/en-us/help/886695/...
Aplikasi saya berfungsi dengan baik di luar layanan, dan saya menggunakan kode yang sama di atas tanpa hasil.
nimeresam
Bagaimana cara menyediakan lingkungan virtual?
shaik moeed
Apakah Anda mencoba virtualenv?
pyOwner
1
Ini tidak berfungsi. Layanan Windows harus mengekspos antarmuka tertentu yang dilakukan oleh paket pywin32. Namun, skrip Python biasa-biasa saja tidak akan cukup.
Siddhartha Gandhi
23

Ada beberapa alternatif untuk menginstal sebagai layanan yang secara virtual dapat dijalankan oleh Windows.

Metode 1: Gunakan instsrv dan srvany dari rktools.exe

Untuk Windows Home Server atau Windows Server 2003 (juga berfungsi dengan WinXP), Alat Kit Sumber Daya Windows Server 2003 hadir dengan utilitas yang dapat digunakan bersama-sama untuk ini, disebut instsrv.exe dan srvany.exe . Lihat artikel Microsoft KB ini KB137890 untuk detail tentang cara menggunakan utils ini.

Untuk Windows Home Server, ada pembungkus ramah pengguna yang bagus untuk utilitas ini dinamai " Any Service Installer ".

Metode 2: Gunakan ServiceInstaller untuk Windows NT

Ada alternatif lain menggunakan ServiceInstaller untuk Windows NT (dapat diunduh di sini ) dengan instruksi python tersedia . Berlawanan dengan namanya, ia bekerja dengan Windows 2000 dan Windows XP juga. Berikut adalah beberapa petunjuk cara menginstal skrip python sebagai layanan.

Menginstal skrip Python

Jalankan ServiceInstaller untuk membuat layanan baru. (Dalam contoh ini, diasumsikan bahwa python diinstal pada c: \ python25)

Service Name  : PythonTest
Display Name : PythonTest 
Startup : Manual (or whatever you like)
Dependencies : (Leave blank or fill to fit your needs)
Executable : c:\python25\python.exe
Arguments : c:\path_to_your_python_script\test.py
Working Directory : c:\path_to_your_python_script

Setelah menginstal, buka applet Layanan Panel Kontrol, pilih dan mulai layanan PythonTest.

Setelah jawaban awal saya, saya perhatikan ada Q & A terkait erat sudah diposting di SO. Lihat juga:

Bisakah saya menjalankan skrip Python sebagai layanan (di Windows)? Bagaimana?

Bagaimana cara membuat Windows mengetahui layanan yang saya tulis dengan Python?

popcnt
sumber
Saya hanya melihat ada Q&A serupa lainnya sudah: stackoverflow.com/questions/32404/… stackoverflow.com/questions/34328/…
popcnt
Service Installer tidak bekerja pada arsitektur 64 bit sehingga opsi 1 menjadi opsi goto.
Noah Campbell
Tautan di atas ke ServiceInstaller tidak lagi berfungsi. Saya menemukannya di sini: sites.google.com/site/conort/…
LarsH
2
off note, saya tidak berpikir NTakan selalu "bertentangan" dengan namanya, setidaknya tidak dalam pidato programmer-folk. Itu hanya mengacu pada " arsitektur NT ", yang bertentangan dengan " merek NT ". Yang mengatakan, menurut berbicara di wikipedia ini adalah untuk diperdebatkan, karena "itu bukan istilah Microsoft resmi", tetapi masih ada tradisi dengan garis pemikiran ini.
n611x007
15

Penjelasan langkah demi langkah cara membuatnya bekerja:

1- Pertama buat file python sesuai dengan kerangka dasar yang disebutkan di atas. Dan simpan ke jalur misalnya: "c: \ PythonFiles \ AppServerSvc.py"

import win32serviceutil
import win32service
import win32event
import servicemanager
import socket


class AppServerSvc (win32serviceutil.ServiceFramework):
    _svc_name_ = "TestService"
    _svc_display_name_ = "Test Service"


    def __init__(self,args):
        win32serviceutil.ServiceFramework.__init__(self,args)
        self.hWaitStop = win32event.CreateEvent(None,0,0,None)
        socket.setdefaulttimeout(60)

    def SvcStop(self):
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        win32event.SetEvent(self.hWaitStop)

    def SvcDoRun(self):
        servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
                          servicemanager.PYS_SERVICE_STARTED,
                          (self._svc_name_,''))
        self.main()

    def main(self):
        # Your business logic or call to any class should be here
        # this time it creates a text.txt and writes Test Service in a daily manner 
        f = open('C:\\test.txt', 'a')
        rc = None
        while rc != win32event.WAIT_OBJECT_0:
            f.write('Test Service  \n')
            f.flush()
            # block for 24*60*60 seconds and wait for a stop event
            # it is used for a one-day loop
            rc = win32event.WaitForSingleObject(self.hWaitStop, 24 * 60 * 60 * 1000)
        f.write('shut down \n')
        f.close()

if __name__ == '__main__':
    win32serviceutil.HandleCommandLine(AppServerSvc)

2 - Pada langkah ini kita harus mendaftarkan layanan kita.

Jalankan command prompt sebagai administrator dan ketik:

sc buat TestService binpath = "C: \ Python36 \ Python.exe c: \ PythonFiles \ AppServerSvc.py" DisplayName = "TestService" start = auto

argumen pertama binpath adalah jalur python.exe

Argumen kedua dari binpath adalah path dari file python Anda yang telah kami buat

Jangan lewatkan bahwa Anda harus meletakkan satu spasi setelah setiap tanda " = ".

Maka jika semuanya baik-baik saja, Anda akan melihat

[SC] CreateService SUCCESS

Sekarang layanan python Anda diinstal sebagai layanan windows sekarang. Anda dapat melihatnya di Manajer Layanan dan registri di bawah:

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ TestService

3 - Ok sekarang. Anda dapat memulai layanan Anda pada manajer layanan.

Anda dapat menjalankan setiap file python yang menyediakan kerangka layanan ini.

Seckin Sanli
sumber
Ada banyak contoh buruk di luar sana tentang cara menggunakan SetEvent(self.hWaitStop)dan WaitForSingleObject. Didasarkan pada penyalinan dari jawaban yang dipilih di sini mungkin. Ini adalah cara yang baik untuk melakukannya yang bekerja dengan baik untuk kedua argumen "debug" dan "berhenti". (Bagian tentang menggunakan SC tampaknya berlebihan ketika HandleCommandLinemelakukan pekerjaan, dan dapat menjalankan debug.)
Alias_Knagg
3

pysc: Manajer Kontrol Layanan di Python

Contoh skrip untuk dijalankan sebagai layanan yang diambil dari pythonhosted.org :

from xmlrpc.server import SimpleXMLRPCServer

from pysc import event_stop


class TestServer:

    def echo(self, msg):
        return msg


if __name__ == '__main__':
    server = SimpleXMLRPCServer(('127.0.0.1', 9001))

    @event_stop
    def stop():
        server.server_close()

    server.register_instance(TestServer())
    server.serve_forever()

Buat dan mulai layanan

import os
import sys
from xmlrpc.client import ServerProxy

import pysc


if __name__ == '__main__':
    service_name = 'test_xmlrpc_server'
    script_path = os.path.join(
        os.path.dirname(__file__), 'xmlrpc_server.py'
    )
    pysc.create(
        service_name=service_name,
        cmd=[sys.executable, script_path]
    )
    pysc.start(service_name)

    client = ServerProxy('http://127.0.0.1:9001')
    print(client.echo('test scm'))

Hentikan dan hapus layanan

import pysc

service_name = 'test_xmlrpc_server'

pysc.stop(service_name)
pysc.delete(service_name)
pip install pysc
Seliverstov Maksim
sumber
3
Adakah yang tahu mengapa ini mendapat downvote? Sepertinya solusi yang bagus.
Jarrod Chesney
3

Saya mulai hosting sebagai layanan dengan pywin32 .

Semuanya baik-baik saja tetapi saya menemukan masalah bahwa layanan tidak dapat memulai dalam 30 detik (batas waktu default untuk Windows) pada startup sistem. Itu penting bagi saya karena startup Windows terjadi secara simultan pada beberapa mesin virtual yang dihosting pada satu mesin fisik, dan beban IO sangat besar. Pesan kesalahan adalah:

Error 1053: The service did not respond to the start or control request in a timely fashion.

Error 7009: Timeout (30000 milliseconds) waiting for the <ServiceName> service to connect.

Saya banyak bertengkar dengan pywin, tetapi akhirnya menggunakan NSSM seperti yang diusulkan dalam jawaban ini . Sangat mudah untuk bermigrasi ke sana.

flam3
sumber
2

nssm dalam python 3+

(Saya mengonversi file .py saya ke .exe dengan pyinstaller )

nssm: seperti yang dikatakan sebelumnya

  • jalankan nssm instal {ServiceName}
  • Di konsol NSSM:

    path: path \ to \ your \ program.exe Anda

    Direktori startup: path \ to \ your \ #sama sebagai path tetapi tanpa program.exe Anda

    Argumen: kosong

Jika Anda tidak ingin mengonversi proyek Anda menjadi .exe

  • buat file .bat dengan python {{your python.py file name}}
  • dan setel path ke file .bat
pembuat kode
sumber
Bagaimana cara menyediakan lingkungan virtual?
shaik moeed
1

Contoh pywin32 lengkap menggunakan loop atau subthread

Setelah mengerjakan ini dan mematikan selama beberapa hari, di sini adalah jawaban yang saya ingin temukan, menggunakan pywin32 agar tetap bagus dan mandiri.

Ini adalah kode kerja yang lengkap untuk satu solusi berbasis loop dan satu berbasis thread. Ini dapat bekerja pada kedua python 2 dan 3, meskipun saya hanya menguji versi terbaru pada 2.7 dan Win7. Pengulangan harus baik untuk kode polling, dan tapak harus bekerja dengan lebih banyak kode seperti server. Tampaknya bekerja dengan baik dengan server pelayan wsgi yang tidak memiliki cara standar untuk mematikan dengan anggun.

Saya juga ingin mencatat bahwa sepertinya ada banyak contoh di luar sana, seperti ini yang hampir bermanfaat, tetapi pada kenyataannya menyesatkan, karena mereka telah memotong dan menempelkan contoh lain secara membabi buta. Saya bisa saja salah. tetapi mengapa membuat acara jika Anda tidak pernah menunggu untuk itu?

Yang mengatakan saya masih merasa saya berada di tanah yang agak goyah di sini, terutama berkaitan dengan seberapa bersih jalan keluar dari versi utas, tapi setidaknya saya percaya tidak ada yang menyesatkan di sini.

Untuk menjalankan cukup salin kode ke file dan ikuti instruksi.

memperbarui:

Gunakan bendera sederhana untuk mengakhiri utas. Yang penting adalah cetakan "selesai".
Untuk contoh yang lebih rinci keluar dari utas server yang tidak kooperatif, lihat posting saya tentang server wsgi pelayan .

# uncomment mainthread() or mainloop() call below
# run without parameters to see HandleCommandLine options
# install service with "install" and remove with "remove"
# run with "debug" to see print statements
# with "start" and "stop" watch for files to appear
# check Windows EventViever for log messages

import socket
import sys
import threading
import time
from random import randint
from os import path

import servicemanager
import win32event
import win32service
import win32serviceutil
# see http://timgolden.me.uk/pywin32-docs/contents.html for details


def dummytask_once(msg='once'):
    fn = path.join(path.dirname(__file__),
                '%s_%s.txt' % (msg, randint(1, 10000)))
    with open(fn, 'w') as fh:
        print(fn)
        fh.write('')


def dummytask_loop():
    global do_run
    while do_run:
        dummytask_once(msg='loop')
        time.sleep(3)


class MyThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)

    def run(self):
        global do_run
        do_run = True
        print('thread start\n')
        dummytask_loop()
        print('thread done\n')

    def exit(self):
        global do_run
        do_run = False


class SMWinservice(win32serviceutil.ServiceFramework):
    _svc_name_ = 'PyWinSvc'
    _svc_display_name_ = 'Python Windows Service'
    _svc_description_ = 'An example of a windows service in Python'

    @classmethod
    def parse_command_line(cls):
        win32serviceutil.HandleCommandLine(cls)

    def __init__(self, args):
        win32serviceutil.ServiceFramework.__init__(self, args)
        self.stopEvt = win32event.CreateEvent(None, 0, 0, None)  # create generic event
        socket.setdefaulttimeout(60)

    def SvcStop(self):
        servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
                            servicemanager.PYS_SERVICE_STOPPED,
                            (self._svc_name_, ''))
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        win32event.SetEvent(self.stopEvt)  # raise event

    def SvcDoRun(self):
        servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
                            servicemanager.PYS_SERVICE_STARTED,
                            (self._svc_name_, ''))
        # UNCOMMENT ONE OF THESE
        # self.mainthread()
        # self.mainloop()

    # Wait for stopEvt indefinitely after starting thread.
    def mainthread(self):
        print('main start')
        self.server = MyThread()
        self.server.start()
        print('wait for win32event')
        win32event.WaitForSingleObject(self.stopEvt, win32event.INFINITE)
        self.server.exit()
        print('wait for thread')
        self.server.join()
        print('main done')

    # Wait for stopEvt event in loop.
    def mainloop(self):
        print('loop start')
        rc = None
        while rc != win32event.WAIT_OBJECT_0:
            dummytask_once()
            rc = win32event.WaitForSingleObject(self.stopEvt, 3000)
        print('loop done')


if __name__ == '__main__':
    SMWinservice.parse_command_line()
Alias_Knagg
sumber
0

Jawaban yang diterima menggunakan win32serviceutilkarya tetapi rumit dan membuat debugging dan perubahan lebih sulit. Hal ini jauh lebih mudah untuk menggunakan NSSM ( Non-Menyedot Service Manager) . Anda menulis dan debug nyaman program python normal dan ketika akhirnya berhasil Anda menggunakan NSSM untuk menginstalnya sebagai layanan dalam waktu kurang dari satu menit:

Dari command prompt yang ditinggikan (admin) Anda menjalankan nssm.exe install NameOfYourServicedan Anda mengisi opsi-opsi ini:

  • path : (path ke python.exe misalnya C:\Python27\Python.exe)
  • Argumen : (path ke skrip python Anda, misalnya c:\path\to\program.py)

Omong-omong, jika program Anda mencetak pesan berguna yang ingin Anda simpan di file log, NSSM juga dapat menangani ini dan banyak lagi untuk Anda.

ndemou
sumber
Ya, ini adalah duplikat dari jawaban Adriano. Saya memutakhirkan jawaban itu dan mencoba mengeditnya tetapi setelah diedit saya melihat jawaban baru.
ndemou
Bagaimana cara menyediakan lingkungan virtual?
shaik moeed
0

Bagi siapa saja yang ingin membuat layanan di VENV atau Pycharm !!!!!!!

Setelah membaca semua jawaban dan buat beberapa skrip, jika Anda dapat menjalankan python service.py installdan python service.py debug, tetapi python service.py starttidak memiliki respons.

Mungkin itu disebabkan oleh masalah venv, karena layanan windows memulai layanan Anda dengan exec PROJECT\venv\Lib\site-packages\win32\pythonservice.exe.

Anda dapat menggunakan powershellatau cmduntuk menguji layanan Anda untuk menemukan lebih banyak detail kesalahan.

PS C:\Users\oraant> E:

PS E:\> cd \Software\PythonService\venv\Lib\site-packages\win32

PS E:\Software\PythonService\venv\Lib\site-packages\win32> .\pythonservice.exe -debug ttttt
Debugging service ttttt - press Ctrl+C to stop.
Error 0xC0000004 - Python could not import the service's module

Traceback (most recent call last):
  File "E:\Software\PythonService\my_service.py", line 2, in <module>
    import win32serviceutil
ModuleNotFoundError: No module named 'win32serviceutil'

(null): (null)

Jika Anda mendapatkan kesalahan seperti saya, maka Anda dapat memeriksa jawaban saya di pertanyaan lain, saya memperbaikinya dan memposting kode saya di sini .

oraant
sumber
-1

https://www.chrisumbel.com/article/windows_services_in_python

  1. Tindak lanjuti PySvc.py

  2. mengganti folder dll

Saya tahu ini sudah tua tapi saya terjebak di ini selamanya. Bagi saya, masalah khusus ini diselesaikan dengan menyalin file ini - pywintypes36.dll

Dari -> Python36 \ Lib \ situs-paket \ pywin32_system32

Ke -> Python36 \ Lib \ situs-paket \ win32

setx /M PATH "%PATH%;C:\Users\user\AppData\Local\Programs\Python\Python38-32;C:\Users\user\AppData\Local\Programs\Python\Python38-32\Scripts;C:\Users\user\AppData\Local\Programs\Python\Python38-32\Lib\site-packages\pywin32_system32;C:\Users\user\AppData\Local\Programs\Python\Python38-32\Lib\site-packages\win32
  1. mengubah path ke folder python oleh

cd C:\Users\user\AppData\Local\Programs\Python\Python38-32

  1. NET START PySvc
  2. NET STOP PySvc
gunarajulu renganathan
sumber