The struct.pack() function allows converting integers of up to 64 bit to byte strings. What's the most efficient way to pack an even larger integer? I'd rather not add a dependency on non-standard modules like PyCrypto (which provides num_to_bytes()).
I take it you mean you only want to use as many bytes as you need to represent the number? e.g. if the number is:

255 or less you'd use only 1 byte
65535 or less 2 bytes
16777215 or less 3 bytes
etc etc

On the Psion PDA they'd usually have some of packing scheme in which you read the first byte, detect if it has the highest bit set and then read another byte if it has.  That way you'd just keep reading bytes until you read the "full" number.  That system works quite well if most of the numbers you are dealing with are fairly small, as you'll normally only use one or two bytes per number.
The alternative is to have one (or more) bytes representing the number of total bytes used, but at that point it's basically a string in Python anyway. i.e. it's a string of base-256 digits.
Efficient arbitrary-sized integer packing in Python