尽管有正确的文件关联和路径,Windows 10也不会使用正确版本的python启动我的python脚本。

时间:2017-02-01 16:18:37

标签: python windows-10 python-3.5

在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只是烦人的。有人有线索吗?

2 个答案:

答案 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。