嗨,我需要在Wine下运行Python(在CI上部署),我遇到了以下奇怪的行为。 如果我在wine中运行python解释器,如下所示(清除linux env):
env -i wine cmd /C python
我把这个放进去操作系统环境公司名称:
^{pr2}$如您所见,有一个键为“”的变量,这是一个问题,因为很多python代码(例如,subprocess模块实际上会检查该变量,并在环境变量无效的情况下死亡)。在
如果我使用SET检查实际的windows环境,则不会得到这个变量:
$ env -i wine cmd /C SET
ALLUSERSPROFILE=C:\users\Public
APPDATA=C:\users\bruno\Application Data
CLIENTNAME=Console
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=schrot
ComSpec=C:\windows\system32\cmd.exe
HOMEDRIVE=C:
HOMEPATH=\users\bruno
LOCALAPPDATA=C:\users\bruno\Local Settings\Application Data
LOGONSERVER=\\schrot
NUMBER_OF_PROCESSORS=8
OS=Windows_NT
PATH=C:\windows\system32;C:\windows;C:\windows\system32\wbem;C:\Program Files\Miniconda3;C:\Program File
s\Miniconda3\Scripts;C:\Program Files\Miniconda3\Library\bin
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 6 Model 158 Stepping 9, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=9e09
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
PROMPT=$P$G
PUBLIC=C:\users\Public
SESSIONNAME=Console
SystemDrive=c:
SYSTEMROOT=C:\windows
TEMP=C:\users\bruno\Temp
TMP=C:\users\bruno\Temp
USERDOMAIN=schrot
USERNAME=bruno
USERPROFILE=C:\users\bruno
windir=C:\windows
WINELOADERNOEXEC=1
winsysdir=C:\windows\system32
进一步调查表明操作系统环境已经由cpython实现中的posixmodule.c初始化。在
如果我真的尝试删除python中的“”变量操作系统环境类阻止这样做,因为“”被视为无效变量:
>>> del os.environ['']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Program Files\Miniconda3\lib\os.py", line 738, in __delitem__
del self._data[encodedkey]
File "C:\Program Files\Miniconda3\lib\os.py", line 776, in <lambda>
if "unsetenv" not in __all__:
OSError: [Errno 0] Error
您对如何解决这个问题有什么建议吗(我可以将此报告作为bug报告提交给ustream python或Wine,但我希望同时让它正常工作)
我认为一个难看的解决方法是执行以下操作并启动每个python脚本:
看起来像是
sitecustomize
模块的作业。从Python文档(The Customization Modules)中:因此,找到Python安装的全局site packages目录并创建一个包含以下内容的
sitecustomize.py
将在一个位置解决每个脚本的问题:相关问题 更多 >
编程相关推荐