- pywin32
- Docs
- Support
- Binaries
- Installing via PIP
- The specified procedure could not be found / Entry-point not found Errors?
- Running as a Windows Service
- Building from source
- Release process
- How to use Win32 API with Python?
- 3 Answers 3
- Saved searches
- Use saved searches to filter your results more quickly
- mhammond/pywin32
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- About
pywin32
This is the readme for the Python for Win32 (pywin32) extensions, which provides access to many of the Windows APIs from Python.
See CHANGES.txt for recent notable changes.
Only Python 3 is supported. If you want Python 2 support, you want build 228 .
Docs
The docs are a long and sad story, but there’s now an online version of the helpfile that ships with the installers (thanks @ofek!). Lots of that is very old, but some is auto-generated and current. Would love help untangling the docs!
Support
Feel free to open issues for all bugs (or suspected bugs) in pywin32. pull-requests for all bugs or features are also welcome.
However, please do not open github issues for general support requests, or for problems or questions using the modules in this package — they will be closed. For such issues, please email the python-win32 mailing list — note that you must be subscribed to the list before posting.
Binaries
Installing via PIP
You should install pywin32 via pip — eg,
python -m pip install —upgrade pywin32
If you encounter any problems when upgrading (eg, «module not found» errors or similar), you should execute:
python Scripts/pywin32_postinstall.py -install
This will make some small attempts to cleanup older conflicting installs.
Note that if you want to use pywin32 for «system wide» features, such as registering COM objects or implementing Windows Services, then you must run that command from an elevated (ie, «Run as Administrator) command prompt.
For unreleased changes, you can download builds made by github actions — choose any «workflow» from the main branch and download its «artifacts»)
The specified procedure could not be found / Entry-point not found Errors?
A very common report is that people install pywin32, but many imports fail with errors similar to the above.
In almost all cases, this tends to mean there are other pywin32 DLLs installed in your system, but in a different location than the new ones. This sometimes happens in environments that come with pywin32 pre-shipped (eg, anaconda?).
The possible solutions are:
- Run the «post_install» script documented above.
- Otherwise, find and remove all other copies of pywintypesXX.dll and pythoncomXX.dll (where XX is the Python version — eg, «39»)
Running as a Windows Service
Modern Python installers do not, by default, install Python in a way that is suitable for running as a service, particularly for other users.
- Ensure Python is installed in a location where the user running the service has access to the installation and is able to load pywintypesXX.dll and pythonXX.dll .
- Manually copy pythonservice.exe from the site-packages/win32 directory to the same place as these DLLs.
Building from source
Install Visual Studio 2019 (later probably works, but options might be different), select «Desktop Development with C++», then the following options:
- Windows 10 SDK (latest offered I guess? At time of writing, 10.0.18362)
- «C++ for MFC for . «
- ARM build tools if necessary.
(the free compilers probably work too, but haven’t been tested — let me know your experiences!)
setup.py is a standard distutils build script, so you probably want:
Some modules need obscure SDKs to build — setup.py should succeed, gracefully telling you why it failed to build them — if the build actually fails with your configuration, please open an issue.
Release process
The following steps are performed when making a new release — this is mainly to form a checklist so mhammond doesn’t forget what to do 🙂
- Ensure CHANGES.txt has everything worth noting, commit it.
- Update setup.py with the new build number.
- Execute build.bat, wait forever, test the artifacts.
- Upload .whl artifacts to pypi — we do this before pushing the tag because they might be rejected for an invalid README.md . Done via py -3.? -m twine upload dist/*XXX*.whl .
- Commit setup.py (so the new build number is in the repo), create a new git tag
- Upload the .exe installers to github.
- Update setup.py with the new build number + «.1» (eg, 123.1), to ensure future test builds aren’t mistaken for the real release.
- Make sure everything is pushed to github, including the tag (ie, git push —tags )
- Send mail to python-win32
How to use Win32 API with Python?
How can I use win32 API in Python? What is the best and easiest way to do it?
Can you please provide some examples?
yes, i actually did it before asking the question, and found several results. my aim is to start learning the most recommended solution to my problem. besides, not such question has been asked in stack overflow before, so I thought good answers from more experienced programmers can show the right path to take for beginners like me =)
Is there a specific use case? what are you trying to do that is not part of the standard python library?
Just reading down through the comments and @SashaChedygov’s one stuck out. Believe it or not, I got here by Googling. This is now (14 years later?) the topmost entry in the list of found articles. Ironic?
3 Answers 3
PyWin32 is the way to go — but how to use it? One approach is to begin with a concrete problem you’re having and attempting to solve it. PyWin32 provides bindings for the Win32 API functions for which there are many, and you really have to pick a specific goal first.
In my Python 2.5 installation (ActiveState on Windows) the win32 package has a Demos folder packed with sample code of various parts of the library.
For example, here’s CopyFileEx.py:
import win32file, win32api import os def ProgressRoutine(TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred, StreamNumber, CallbackReason, SourceFile, DestinationFile, Data): print Data print TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred, StreamNumber, CallbackReason, SourceFile, DestinationFile ##if TotalBytesTransferred > 100000: ## return win32file.PROGRESS_STOP return win32file.PROGRESS_CONTINUE temp_dir=win32api.GetTempPath() fsrc=win32api.GetTempFileName(temp_dir,'cfe')[0] fdst=win32api.GetTempFileName(temp_dir,'cfe')[0] print fsrc, fdst f=open(fsrc,'w') f.write('xxxxxxxxxxxxxxxx\n'*32768) f.close() ## add a couple of extra data streams f=open(fsrc+':stream_y','w') f.write('yyyyyyyyyyyyyyyy\n'*32768) f.close() f=open(fsrc+':stream_z','w') f.write('zzzzzzzzzzzzzzzz\n'*32768) f.close() operation_desc='Copying '+fsrc+' to '+fdst win32file.CopyFileEx(fsrc, fdst, ProgressRoutine, operation_desc, False, win32file.COPY_FILE_RESTARTABLE)
It shows how to use the CopyFileEx function with a few others (such as GetTempPath and GetTempFileName). From this example you can get a «general feel» of how to work with this library.
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Python for Windows (pywin32) Extensions
mhammond/pywin32
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
This is the readme for the Python for Win32 (pywin32) extensions, which provides access to many of the Windows APIs from Python.
See CHANGES.txt for recent notable changes.
The docs are a long and sad story, but there’s now an online version of the helpfile that ships with the installers (thanks @ofek!). Lots of that is very old, but some is auto-generated and current. Would love help untangling the docs!
Feel free to open issues for all bugs (or suspected bugs) in pywin32. pull-requests for all bugs or features are also welcome.
However, please do not open github issues for general support requests, or for problems or questions using the modules in this package — they will be closed. For such issues, please email the python-win32 mailing list — note that you must be subscribed to the list before posting.
You should install pywin32 via pip — eg,
python -m pip install —upgrade pywin32
There is a post-install script (see below) which should not be run inside virtual environments; it should only be run in «global» installs.
For unreleased changes, you can download builds made by github actions — choose any «workflow» from the main branch and download its «artifacts»)
Outside of a virtual environment you might want to install COM objects, services, etc. You can do this by executing:
python Scripts/pywin32_postinstall.py -install
From the root of your Python installation.
If you do this with normal permissions it will be global for your user (a few files will be copied to the root of your Python install and some changes made to HKCU). If you execute this from an elevated process, it will be global for the machine (files will be copied to System32, HKLM will be changed, etc)
Running as a Windows Service
To run as a service, you probably want to install pywin32 globally from an elevated command prompt — see above.
You also need to ensure Python is installed in a location where the user running the service has access to the installation and is able to load pywintypesXX.dll and pythonXX.dll . In particular, the LocalSystem account typically will not have access to your local %USER% directory structure.
If you encounter any problems when upgrading like the following:
The specified procedure could not be found Entry-point not found
It usually means one of 2 things:
- You’ve upgraded an install where the post-install script has previously run. So you should run it again:
- Run the «post_install» script documented above.
- Otherwise, find and remove all other copies of pywintypesXX.dll and pythoncomXX.dll (where XX is the Python version — eg, «39»)
Install Visual Studio 2019 (later probably works, but options might be different), select «Desktop Development with C++», then the following options:
- Windows 10 SDK (latest offered I guess? At time of writing, 10.0.18362)
- «C++ for MFC for . «
- ARM build tools if necessary.
(the free compilers probably work too, but haven’t been tested — let me know your experiences!)
setup.py is a standard distutils build script, so you probably want:
Some modules need obscure SDKs to build — setup.py should succeed, gracefully telling you why it failed to build them — if the build actually fails with your configuration, please open an issue.
The following steps are performed when making a new release — this is mainly to form a checklist so mhammond doesn’t forget what to do 🙂
- Ensure CHANGES.txt has everything worth noting. Update the header to reflect the about-to-be released build and date, commit it.
- Update setup.py with the new build number.
- Execute make.bat , wait forever, test the artifacts.
- Upload .whl artifacts to pypi — we do this before pushing the tag because they might be rejected for an invalid README.md . Done via py -3.? -m twine upload dist/*XXX*.whl .
- Commit setup.py (so the new build number is in the repo), create a new git tag
- Upload the .exe installers to github.
- Update setup.py with the new build number + «.1» (eg, 123.1), to ensure future test builds aren’t mistaken for the real release.
- Make sure everything is pushed to github, including the tag (ie, git push —tags )
- Send mail to python-win32
About
Python for Windows (pywin32) Extensions