我刚刚注意到这一点,我完全困惑,不知道为什么会发生这种情况,以及如何防止它.
我工作的计算机是Windows 10,安装在哥本哈根市.我的平台是:
$ for ix in "uname -s" "python3 --version"; do echo "$ix: " $($ix); done
uname -s: MINGW64_NT-10.0-19045
python3 --version: Python 3.11.9
由于我在MINGW 64下使用bash
终端,因此我还为.bashrc
中的python 3设置了一个别名:
alias python3="winpty python3"
好的;所以现在我想通过在bash终端中调用python3
命令来打印tzlocal.get_localzone()
:
$ python3 -c 'import tzlocal; print(tzlocal.get_localzone())'
Europe/Copenhagen
太好了,我准确地得到了时区.然而,回想一下这里的python3
实际上是winpty python3
;要测试just python3
,让我们在命令前添加反斜线,以摆脱bash
别名:
$ \python3 -c 'import tzlocal; print(tzlocal.get_localzone())'
Europe/Paris
太棒了--我从来没有想到会这样;为什么我会在这里看到巴黎,而不是哥本哈根(这就是那台机器上Windows 10本身的设置目的)?
我的意思是,就时区而言,这并不遥远--但当明显有条件使其输出正确的时区时,为什么要满足于更少的时间呢?
那么,为什么会发生这种情况--我如何才能让tzlocal.get_localzone()
分中的\python3
分返回欧洲/哥本哈根?
编辑:通过在这两种情况下打印os.environ
,可以看到winpty
Python环境定义了环境变量"ZZ":"Europe/Copenhagen"-而直接Python环境没有这样的变量.