在Windows 10中,我安装了Python3.5和Python2.7,并且需要同时保留它们。我的脚本是为Python3.5编写的。如果我使用“python”或“py”前缀启动脚本,它会毫无问题地启动。但是,当我直接调用它时,它失败并出现类似于python版本冲突的错误:
文件“C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python35 \ lib \ site.py”,第176行 文件= sys.stderr) ^ SyntaxError:语法无效
在我的命令提示符下,输入
template< class T1, class T2 >
void swap( pair<T1,T2>& lhs, pair<T1,T2>& rhs );
或
>python script.py
它可以工作,但如果我只运行脚本,无论是使用./script.py还是只运行script.py(因为脚本在我的路径中),它会因上述冲突而失败。
My PATH,PYTHONHOME和PYTHONPATH都指向3.5
>py script.py
我的python文件关联设置为py启动器,如果我将py添加到路径的开头,它将正常工作。
>echo %PATH%
C:\Users\user\AppData\Local\Programs\Python\Python35;C:\Users\user\AppData\Local\Programs\Python\Python35\Scripts;
>echo %PYTHONPATH%
C:\Users\user\AppData\Local\Programs\Python\Python35\lib
>echo %PYTHONHOME%
C:\Users\user\AppData\Local\Programs\Python\Python35
我的py和python都有正确的版本用于在我的路径中调用的版本:
>assoc .py
.py=Python.File
>ftype Python.File
Python.File="C:\WINDOWS\py.exe" "%L" %*
哪个python也指向正确的版本。
>py --version
Python 3.5.3
>python --version
Python 3.5.3
我能想到的另一件事是cygwin或MSDOS shell有他们自己使用的python解释器干扰,但我找不到任何一个目录中的python版本。
在Windows 10的某个地方必须有一些其他文件关联覆盖我不知道的内容。 Unix shebang会解决这个问题,但Windows只是烦人的。有人有线索吗?
答案 0 :(得分:2)
解决了! assoc py不正确。在注册表中,我找到了另一个由IDE添加的密钥,它添加了一个用它自己的python27版本编辑的命令。它以某种方式优先于真正的python。删除此密钥后,重置Windows关联扩展名.py,它正常工作。
感谢@ Jean-FrançoisFabre的建议。
答案 1 :(得分:0)
对此问题还有一个调整。如果您不带扩展名运行Python脚本(使用.py
环境变量),则需要更新PATHEXT
注册表
到HKEY_CLASSES_ROOT\py_auto_file\shell\open\command
的{{1}}部分可能会丢失,以确保将参数正确传递给Python。