I put the checkout files in shop/views/paypal along with an init.py file, but of course it doesn't matter where they are.
This is enough to get the correct order and price to PayPal (who only want the billing address if you are using a credit card for the first time - otherwise they won't ask for duplicate info). It doesn't clear the cart, which is intentional. I'll add a paypal IPN (instant payment notification) module later in a new ticket. I think that I'd rather have the IPN script clear the cart, since there is no reason not to use IPN that I can see.
Reported by jshaffer