# [Build native Windows on Arm applications with Python](https://learn.arm.com/learning-paths/laptops-and-desktops/win_python/)

## In this learning path

- [Introduction](https://learn.arm.com/learning-paths/laptops-and-desktops/win_python/)
- [Platform-specificity of the Python packages](https://learn.arm.com/learning-paths/laptops-and-desktops/win_python/how-to-1/)
- [Build the application](https://learn.arm.com/learning-paths/laptops-and-desktops/win_python/how-to-2/)
- [Next Steps](https://learn.arm.com/learning-paths/laptops-and-desktops/win_python/_next-steps/)

## About this Learning Path

| Skill level: | Introductory |
|--------------|--------------|
| Reading time: | 30 min      |
| Last updated: | 11 Aug 2026 |

| Author: | Dawid Borycki [GitHub](https://github.com/dawidborycki) |
|---------|----------------------------------------------------------|
| Arm IP: | [Cortex-A](https://support.arm.com/?tab=compute-ip&Product%20Type=Application%20Processors) |
| Tags:   | [Migration to Arm](/tag/migration-to-arm), [Windows](/tag/windows), [Python](/tag/python), [Visual Studio Code](/tag/visual-studio-code) |

### Who is this for?
This is an introductory topic for developers who are interested in building Python applications on Arm.

### What will you learn?
Upon completion of this Learning Path, you will be able to:
- Understand the platform-dependency of Python packages
- Leverage native Arm64 for Python applications

### Prerequisites
Before starting, you will need the following:
- A Windows on Arm computer such as the Lenovo Thinkpad X13s running Windows 11 or a Windows on Arm [virtual machine](/learning-paths/cross-platform/woa_azure/).
- Any code editor, we recommend using [Visual Studio Code for Arm64](https://code.visualstudio.com/docs/?dv=win32arm64user).
- Visual Studio 2022 with Arm build tools. [Refer to this guide for the installation steps](https://developer.arm.com/documentation/102528/0100/Install-Visual-Studio).

### Summary
You’ll use platform-specific Python packages on Windows on Arm to build an Arm64-native application with NumPy. First, you’ll create a `sample.py` script that generates noisy sine waves, computes fast Fourier transforms, and records timings for multiple input sizes. Then, you’ll run the script with Arm64 tooling and use the results to understand how package choice and input size affect performance.

### Frequently asked questions

#### What result should I expect when I run the sample application?
The program computes FFTs of synthesized sine waves with added noise for several input lengths and prints execution times. Use the printed timings to compare how runtime changes as the input size varies on the same device.

#### Where can I find the complete sample code if my script differs?
A complete version of the code is available on GitHub. Compare your `sample.py` with that version if you see unexpected results.

#### What should I check if import numpy fails when running sample.py?
Confirm that you installed NumPy during setup. Also verify that you’re using the Windows on Arm environment and Arm64 tooling noted in the setup.

#### Which parts of the sample can I change to explore performance differences?
Modify the set of input lengths, the number of iterations, or the signal parameters used to synthesize the sine waves. Rerun the script and compare the new execution times.

#### How do I compare the Arm64 and x64 Python runs?
Run `py -3.12-64 sample.py` for x64 emulation, then run `py -3.12-arm64 sample.py` for Arm64. Run both commands from the directory containing `sample.py` and compare the execution times for the same signal lengths.
