If you use bedtools genomecov you can use a scaling factor.
bedtools genomecov -ibam input.bam -bg -scale X -g genome.chrom.sizes > normalised.bg
where X is the scaling factor. The scale could be for each sample 1,000,000/mapped reads, or each sample divided by the mean of mapped reads for each sample.
You can then use:
wigToBigWig -clip normalised.bg genome.chrom.sizes normalised.bw
pybedtools has a function that will scale your BAM by million mapped reads (the scaling used by many ENCODE data sets) and creates a bigWig file all in one shot:
from pybedtools.contrib.bigwig import bam_to_bigwig bam_to_bigwig(bam='path/to/bam', genome='hg19', output='path/to/bigwig')
More details in this answer: Converting Bam To Bedgraph For Viewing On Ucsc?
As of today, you can use deeptools exactly for these kind of tasks: https://deeptools.readthedocs.io/en/latest/index.html