I was struggling with this for some time and really liked the Twilio option. But then I dug deeper and found that there is a Google Voice API called pygooglevoice that works. Clean, easy... No carrier lookup... For example, set up a virtualenv and install with pip:
pip install pygooglevoice
Then use something like this:
from googlevoice import Voice
from googlevoice.util import input
def send(number, message):
user = '[email protected]'
password = 'password'
voice = Voice()
voice.login(user, password)
#number = input('Number to send message to: ') # use these for command method
#message = input('Message text: ')
voice.send_sms(number, message)
Please note that I have done limited testing with this so I'm not sure all the pros and cons. It's quite possible that there are limitations I haven't discovered yet. But in the time I've played around with it, I've been happy.