1

a) 如果我选择 Python 2.5,我的代码可以正常工作,但在使用 python 2.7 时会出错。通过选择 python 2.5 作为默认程序,我很容易解决了 Windows 中的问题。但是,似乎 cmd 并没有遵循这种变化。我该如何解决这个问题?

b) 使用 python.exe 与 pythonw.exe 运行脚本有什么区别?我在某处读到,在使用 pythonw.exe 时,我不会看到弹出并消失的 cmd 窗口。但就我而言,这不是真的,我实际上看到了 cmd 窗口。此外,如果我使用 python.exe,我会在运行脚本时遇到错误,但在使用 pythonw.exe 时不会。

4

3 回答 3

0

假设:你提到了 python(w).exe 和 cmd,所以你很可能在 Windows 上。

  1. 您可能在 IDE 中的某处选择了“使用 python 2.n”(无论您使用哪个)。只要您只从那里执行脚本,它就可以正常工作。在这种情况下,从系统上的任何其他位置,Windows(或任何其他操作系统)都会使用环境变量 PATH。(右键单击我的电脑>高级>环境变量或其他东西)。它可能包含 python27.exe C:/Python27 的路径,将其更改为 C:/Python25。如果使用多个目录,则第一顺序优先。

  2. pythonw.exe 是我相信 Mark Hammond 与早期 pywin32 开发相关的自定义可执行文件,是的,它应该在启动期间抑制控制台窗口。

于 2013-11-07T18:20:23.490 回答
0

您可以使用 virtualenv 和 virtualenvwrapper 程序,使用 virtualenv 您可以选择您选择的 python 环境。

例如,如果你想用 python 2.7 执行“App A”,你可以用 virtualenv 来做(Debian 的例子)

安装一个包

apt-get update
apt-get install python-pip git 
pip install virtualenv virtualenvwrapper

配置 virtualenvwrapper

cat << EOF >> ~/.bashrc
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/Devel
source /usr/local/bin/virtualenvwrapper.sh
EOF
source ~/.bashrc

准备 App A 环境

mkvirtualenv --no-site-packages -p /usr/bin/python2.7 app_a
add2virtualenv /opt/app_a

运行你的应用程序

workon app_a
yourscrypt.py

或者

$HOME/.virtualenvs/app_a/bin/python yourscript.py
于 2013-11-07T18:09:45.397 回答
0

在不同 Python 版本之间轻松切换的常用方法是使用 virtualenv。但是,在您的情况下,您已更改 .py 扩展名的文件关联。但是您没有修改PATH环境变量。因此,当您双击 .py 文件时,您将获得所需的 Python 版本。但是python script.py在命令行执行时,PATH变量是用来查找PATH的,系统找错了。您可以通过修改PATH变量来解决这个问题。但是,virtualenv 会更好!

pythonw.exe和python.exe的区别?前者针对 WINDOWS 子系统,后者针对 CONSOLE 子系统。您通常将前者用于 GUI 程序,而将后者用于控制台程序。有关子系统的更多信息,请参见 MSDN:/SUBSYSTEM

Python 文档还从 Python 的角度涵盖了该主题:

默认情况下,python.exe 将执行 Python 脚本(扩展名为 .py 的文件)。这个可执行文件会打开一个终端,即使程序使用 GUI,它也会保持打开状态。如果您不希望发生这种情况,请使用扩展名 .pyw,这将导致脚本默认由 pythonw.exe 执行(两个可执行文件都位于 Python 安装目录的顶层)。这会在启动时抑制终端窗口。

如果您在运行 pythonw 时看到一个控制台窗口,那么您要么从现有的控制台窗口开始,要么您的程序正在创建一个。为什么您的程序在通过 python 而不是 pythonw 运行时会失败?我不知道。你没有显示你的程序,或者你的错误,我的水晶球目前正在维修中!;-)


说了这么多,并试图回答你提出的问题,我认为你没有以正确的方式解决你的问题。在我看来,正确的解决方案是修复您的代码,以便它可以在 Python 2.7 中运行。

于 2013-11-07T18:13:21.623 回答