I am currently developing a python program for a Raspberry Pi. This Raspberry is meant to control a solar panel. In fact, there will be many Raspberry(ies) controlling solar panels and they will be connected to each others by RJ wires. The idea is that every Raspberry has the same status, there is not any "server" Raspberry and "client" Raspberry. 
The program will receive GPS data, i.e. position, time...
Except from the GPS data, the Raspberry(ies) will not have direct internet access. However, it will be possible to plug a 3G key in order to gain access to internet. 
The problem is the following : I want to update my python program remotely, by internet provided by my 3G key (the solar panels are in a field, and I'm home for instance so I do not want to drive a hundred miles to get my Raspberry(ies) back and update them manually...). How is it possible to make the update remotely considering that I do not have a real "server" in my network of Raspberry(ies)?
I think you however need a server(or it can be just file-share service). If I got it correctly you need to control(or just update) Raspberry(ies), that connected to internet via 3G. So, there are options I see:

Connect them into VPN;
Write script that always be checking for new update for your app from a http\ftp file-sharing server;
Use reverse-shell, but working depends on NAT specs that uses 3G provider.
How can I update a python program remotely on linux?