If I understand you correctly, you want to build the program once on your computer, then pack the compilation result in some archive form and distribute that, then pio is supposed to take that archive form and upload it to the target microcontroller?
Well that’s partly possibly and partly has some caveats. In order to upload the program, PIO must download the upload tools (e.g., avrdude, esptool, bossac, openocd, …) for the host architecture. That cannot be easily offline packaged and be cross-platform. PIO will handle this itself.
What is possible is uploading without re-building the project. Practically every platform (in PlatformIO speak, the microcontroller platform, such as atmelavr, espressif8266, espressif32, …) implements the build target
nobuild, meaning that no compilation is attempted and the previous compilation result (
firmware.elf in the
.pio\build\<environment> folder) are used to directly upload it. See Upload Latest build without a Compile/Link.
So a packaging like that can work by running
pio run once to build the firmware image, removing some non-needed build artifacts (
.pio\build\<environment>\*everything that's not firmware elf or bin or filesystem images in case of ESP8266/ESP32*), zipping the entire project folder, then unzipping that on the other end and running
pio run -t nobuild -t upload to do a upload-without-recompilation. Then it should use your previously, locally compiled
firmware.bin and friends for upload, and will install upload tools needed for the host computer as needed.
Of course, non-PIO ways exist too and might be more straight-forward. If your project just results in a
firmware.bin that needs to be uploaded, you can again use
pio run to produce this file once, then stick in a ZIP file together with a text file which says which upload tool needs to be installed and which upload command to run. No PIO involved then and less overhead, but also way less flexible.