我有一个奇怪的问题:
当我执行这个:
print(os.environ)
在python.exe中,我看到一件事并且在IDLE(pythonw.exe)中另一件事,为什么?
可能这是某种缓存还是什么?
PS我的系统:Windows 7 x64和Python 3.5.1 x32
为什么你把它标记为重复,我没有找到这类问题的答案。 我读了python.exe和pythonw.exe的区别,但我不明白为什么PATH变量是不同的。
这是干扰:
python.exe:
C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Program Files\Broadcom\Broadcom 802.11 Network Adapter\Driver;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Lenovo\Bluetooth Software\;C:\Program Files\Lenovo\Bluetooth Software\syswow64;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x86;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x64;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Skype\Phone\;C:\Program Files\Git\cmd;C:\Program Files (x86)
odejs\;C:\Users\someusername\AppData\Local\Programs\ Python\Python35-32\Scripts\;C:\Users\someusername\AppData\Local\Programs\Python\Python35-32\;C:\Program Files (x86)
odejs\;C:\Users\someusername\AppData
oaming
pm
pythonw.exe:
C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Program Files\Broadcom\Broadcom 802.11 Network Adapter\Driver;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Lenovo\Bluetooth Software\;C:\Program Files\Lenovo\Bluetooth Software\syswow64;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x86;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x64;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Skype\Phone\;C:\Program Files\Git\cmd;C:\Users\someusername\AppData\Local\Programs\Python\Python35-32\Scripts\;C:\Users\someusername\AppData\Local\Programs\Python\Python35-32\
你在python.exe结果中看到nodejs路径,而不是在pythonw.exe中看到它吗? 我删除了所有pyc文件但没有帮助
"我看到一件事[...]和另一件事"什么事情? 有许多不同的环境变量,你必须比这更具体。
@jonrsharpe虽然另一个问题涉及问题的python vs pythonw部分,但使用的可执行文件与OP正在讨论的环境变量几乎没有关系。 另外,他们对pythonw的使用仅通过IDLE,其行为与python的行为相似,使得这个问题与python vs pythonw无关。
@Xion请实际告诉我们您看到的差异,否则我们将无法解释您为什么会看到它们。
请更改问题的标题,因为它没有描述您的要求。 您的环境列表应该只显示差异。 常见项目无关紧要。 你还应该说你如何启动python.exe与你如何启动pythonw.exe(通过IDLE)。 两者都可以以各种方式启动。
PATH环境变量的值与python.exe和pythonw.exe之间的差别很小。关于PATH或一般环境变量,您需要了解的是它们通常是从调用进程继承的。
因此,当您从命令行调用python.exe时,该进程将继承命令行具有的PATH值。如果使用某个快捷方式打开IDLE,则它将从Windows继承该值。
每个进程都可以随心所欲地处理环境变量;因此影响他们开始的过程。例如:
C:\>set FOO=Hello world
C:\>py -3
Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:27:37) [MSC v.1900 64 bit (AMD64)] on win32
Type"help","copyright","credits" or"license" for more information.
>>> import os
>>> os.environ['FOO']
'Hello world'
>>> ^Z
C:\>set FOO=Hello world foo bar baz
C:\>py -3
Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:27:37) [MSC v.1900 64 bit (AMD64)] on win32
Type"help","copyright","credits" or"license" for more information.
>>> import os
>>> os.environ['FOO']
'Hello world foo bar baz'
就像我创建了一个新的环境变量FOO,它自动传递给我开始的进程(Python 3),它可以在那里访问它。
这同样适用于PATH环境变量。如果您在那里看到差异,可能不是因为您的可执行文件不同,而是因为调用进程可能以不同的方式影响它。
我理解PATH的用法,但pythonw.exe怎么样? 它可以获得自己的PATH var? 我需要pythonw.exe来获取带有nodejs路径的有效PATH var
毫无疑问,它是从Windows的环境设置中获得的。 但请注意,您的"pythonw.exe"示例实际上是另一个示例的子集。 Nodejs相关目录是唯一被遗漏的目录。 因此,另一种情况 -"python.exe" - 可能实际上是由这些路径增强的。 但同样:这与pythonw.exe无关。