Isso depende de qual é o problema. Se for para clonar e modificar o ambiente, uma solução pode ser:
subprocess.Popen(my_command, env=dict(os.environ, PATH="path"))
Mas isso depende um pouco do fato de as variáveis substituídas serem identificadores python válidos, o que geralmente é (com que frequência você encontra nomes de variáveis de ambiente que não são alfanuméricos + sublinhado ou variáveis que começam com um número?).
Caso contrário, você poderá escrever algo como:
subprocess.Popen(my_command, env=dict(os.environ,
**{"Not valid python name":"value"}))
No caso muito estranho (com que frequência você usa códigos de controle ou caracteres não-ascii em nomes de variáveis de ambiente?) Que as chaves do ambiente são as que bytes
você não pode (no python3) usar essa construção.
Como você pode ver as técnicas (especialmente a primeira) usadas aqui, os benefícios nas chaves do ambiente são normalmente identificadores python válidos e também conhecidos antecipadamente (no momento da codificação), a segunda abordagem tem problemas. Nos casos em que esse não é o caso, você provavelmente deve procurar outra abordagem .
os.pathsep
vez de ":" para caminhos que funcionam entre plataformas. Veja stackoverflow.com/questions/1499019/…