1. 通过注册表操作HKLMSYSTEMCurrentControlSetControlSession ManagerEnvironment以达到目的，参考_winreg修改注册表，如果要通知其他程序环境变量已改变，则可以使用pywin32中的win32gui模块来实现：
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61  from _winreg import * import os, sys, win32gui, win32con def queryValue(key, name): value, type_id = QueryValueEx(key, name) return value def show(key): for i in range(1024): try: n,v,t = EnumValue(key, i) print '%s=%s' % (n, v) except EnvironmentError: break def main(): try: path = r'SYSTEMCurrentControlSetControlSession ManagerEnvironment' reg = ConnectRegistry(None, HKEY_LOCAL_MACHINE) key = OpenKey(reg, path, 0, KEY_ALL_ACCESS) if len(sys.argv) == 1: show(key) else: name, value = sys.argv[1].split('=') if name.upper() == 'PATH': value = queryValue(key, name) + ';' + value if value: SetValueEx(key, name, 0, REG_EXPAND_SZ, value) else: DeleteValue(key, name) win32gui.SendMessage(win32con.HWND_BROADCAST, win32con.WM_SETTINGCHANGE, 0, 'Environment') except Exception, e: print e CloseKey(key) CloseKey(reg) if __name__=='__main__': usage = """ Usage: Show all environment vsarisbles - enver Add/Modify/Delete environment variable - enver =[value] If is PATH enver will append the value prefixed with ; If there is no value enver will delete the environment variable Note that the current command window will not be affected, only new command windows. """ argc = len(sys.argv) if argc > 2 or (argc == 2 and sys.argv[1].find('=') == -1): print usage sys.exit() main() 
1. 如果系统有setx，可以用os.system(“setx xxxxx xxxxxx”)这种方式

P.S. 用os.putenv和pywin32中的win32api.SetEnvironmentVariable是没有办法持久化修改环境变量的。修改影响的就是该进程和子进程（相当于shell的export）