OSError: [WinError 193] %1 不是有效的 Win32 应用程序

Posted

技术标签:

【中文标题】OSError: [WinError 193] %1 不是有效的 Win32 应用程序【英文标题】:OSError: [WinError 193] %1 is not a valid Win32 application 【发布时间】:2014-10-28 09:45:57 【问题描述】:

我正在尝试使用子进程从 Python 解释器中调用 Python 文件“hello.py”。但我无法解决此错误。 [Python 3.4.1]。

import subprocess    
subprocess.call(['hello.py', 'htmlfilename.htm'])
Traceback (most recent call last):
  File "<pyshell#42>", line 1, in <module>
    subprocess.call(['hello.py', 'htmlfilename.htm'])
  File "C:\Python34\lib\subprocess.py", line 537, in call
    with Popen(*popenargs, **kwargs) as p:
  File "C:\Python34\lib\subprocess.py", line 858, in __init__
    restore_signals, start_new_session)
  File "C:\Python34\lib\subprocess.py", line 1111, in _execute_child
    startupinfo)
OSError: [WinError 193] %1 is not a valid Win32 application

除了使用子进程之外,还有其他方法可以“调用带有参数的 python 脚本”吗?

【问题讨论】:

【参考方案1】:

我在使用 Python 语言中的 selenium 运行 chrome 驱动程序代码时出现此错误,当我删除当前的 chrome 驱动程序并安装与我的 PC 兼容的最新驱动程序时,该错误已修复,您可以在此 youtube 上获得详细摘要视频

https://www.youtube.com/watch?v=WnWQgUerR0c

欢迎。

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review【参考方案2】:

删除所有的python文件夹

C:/program files/user/AppData/python

然后它会工作(如果你有 jupyter 错误)。

【讨论】:

C:/program files/user/AppData/python 看起来不像一条存在的路径。你的意思是C:/Users/user/AppData/python 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。【参考方案3】:

我在尝试安装 SpaCy 时遇到此错误。我有 Python 3.7 32 位版本,它不允许我安装 SpaCy。

首先,我尝试升级到 Python 3.9 64 位版本并卸载了 python 3.7。然后为了保存我的库,我将 python 3.7 版本的站点包复制到 3.9 版本,这在下载 SpaCy 时给了我这个错误。

虽然lib文件夹有很多错误,但我通过卸载NumPy然后重新安装解决了[OSError: WinError 193]。

【讨论】:

【参考方案4】:

以上所有解决方案都是合乎逻辑的,我认为涵盖了根本原因,但对我来说,以上都不起作用。因此把它放在这里可能对其他人有帮助。

我的environment 搞砸了。从traceback可以看出,这里涉及到两个python环境:

    C:\Users\example\AppData\Roaming\Python\Python37 C:\Users\example\Anaconda3

我清理了路径,刚刚删除了C:\Users\example\AppData\Roaming\Python\Python37中的所有文件。

然后它就像魅力一样发挥作用。

这个link 帮助我找到了解决方案。

【讨论】:

【参考方案5】:

我通过以下步骤解决了这个问题:

1> 卸载python 2 > 从 C/program files/ 和 user/sukhendra/AppData 中删除了 Python37 文件夹 3> 删除所有 python37 路径

那么我的电脑中只剩下 Anaconda 所以打开了Anaconda,然后对我来说一切正常

【讨论】:

【参考方案6】:

我的问题涉及poetryargparse。 我用这样的参数调用脚本:

poetry run .\src\script.py --help

并且遇到了同样的错误,所以当我将命令更改为:

poetry run python.exe .\src\script.py --help

然后一切正常。

【讨论】:

【参考方案7】:

我在subprocess.call 中忘记使用shell=True 时遇到了同样的错误。

subprocess.call('python modify_depth_images.py', shell=True)

Running External Command

运行一个外部命令而不与它交互,例如一个 可以使用os.system(),使用call() 函数。

import subprocess

Simple command subprocess.call(['ls', '-1'], shell=True)

【讨论】:

【参考方案8】:

文件 hello.py 不是可执行文件。你需要指定一个像python.exe这样的文件

尝试以下:

import sys
subprocess.call([sys.executable, 'hello.py', 'htmlfilename.htm'])

【讨论】:

【参考方案9】:

我也遇到了同样的问题,并采取了解决此问题的步骤。

    我从系统中删除了不必要的 python 路径,除了 anaconda 路径。 C:\Users\AppData\Roaming = 删除任何不必要的 python 文件/文件夹。这些文件可能会干扰当前的执行。

问候 Vj

【讨论】:

【参考方案10】:

对于更新后在 Windows 上遇到此问题的任何人

发生的事情是 Windows Defender 进行了一些更改。可能会导致运行数据提取脚本,但该项目的 python.exe 已减少到 0kb。从另一个项目复制 python.exe 并替换它现在解决了。

【讨论】:

【参考方案11】:

对我来说,经过以下步骤后问题得到了解决:

    在 windows 上安装 python 32 位版本。 添加新安装的python及其脚本文件夹(pip所在的环境变量)

当您要运行的任何应用程序需要 python 32 位变体并且您有 64 位变体时,问题就会出现

注意:一旦你安装了 python 32 位变体,不要忘记使用这个新的 python 32 位变体的 pip 安装所有必需的包

【讨论】:

【参考方案12】:

通过pip从命令行/终端卸载numpy为我修复了错误:

pip uninstall numpy

【讨论】:

【参考方案13】:

OSError: [WinError 193] %1 不是有效的 Win32 应用程序

这个错误很可能是由于这一行 import subprocess

我遇到了同样的问题,并通过卸载并重新安装 python 和 anaconda 解决了这个问题,然后我使用 jupyter 并编写了 pip install numpy 这给了我获取站点包的整个路径我删除了我的站点包文件夹,然后错误消失了。实际上,因为我有 2 个用于站点包的文件夹,一个包含 anaconda,另一个位于应用程序数据中(其中有一些问题),因为我删除了该站点包文件夹,然后它自动开始从站点包文件夹中获取我的库有了anaconda,问题就解决了。

【讨论】:

嗯,不。回溯清楚地表明子流程的导入成功。【参考方案14】:

Python 安装程序通常会向系统注册 .py 文件。如果你显式运行 shell,它可以工作:

import subprocess
subprocess.call(['hello.py', 'htmlfilename.htm'], shell=True)
# --- or ----
subprocess.call('hello.py htmlfilename.htm', shell=True)

您可以在命令行上检查您的文件关联

C:\>assoc .py
.py=Python.File

C:\>ftype Python.File
Python.File="C:\Python27\python.exe" "%1" %*

【讨论】:

感谢您提醒我,当subprocess 神秘失败时,shell=True 始终是一个选项!这个问题与我的问题无关(我有一个实际的 Windows 可执行文件,它只是由于某种原因无法运行......如果我使用 32 位或 64 位版本的解释器并不重要),但你的建议使用shell=True 有效!【参考方案15】:

错误很明显。文件hello.py 不是可执行文件。您需要指定可执行文件:

subprocess.call(['python.exe', 'hello.py', 'htmlfilename.htm'])

您需要 python.exe 在搜索路径上可见,或者您可以将完整路径传递给正在运行调用脚本的可执行文件:

import sys
subprocess.call([sys.executable, 'hello.py', 'htmlfilename.htm'])

【讨论】:

"错误很明显。"今天我了解到“清晰”这个词有了新的含义。 错误信息是 esp。 清楚,因为由于某种原因它无法将%1 解析为hello.py。 IMO 这是 Python 中的一个错误。 @david-heffernan 我对核心 Python / 子进程模块的实现细节知之甚少,无法说出 %1 占位符的来源,以及为什么它没有解析为文件名。但是正如您所说,即使错误出现在 Windows API 中,并且错误消息始终包含未解决的 %1 占位符,如果出现 OSError subprocess.call 可以扫描错误消息以查找 %1 并替换它因此,在将消息提供给异常之前。 @david-heffernan 并不是说​​我认为这个讨论会导致某个地方,但是不,我不一定需要知道 %1 的确切来源才能知道 Python 在位置来修复/改进它。当我说“Python”时,它包括子流程模块。 我们并不是在抱怨 Python 没有自动填充 %1。我们抱怨您声称“错误很清楚”,而您后来说“并不总是清楚在 %1 中放入什么值”,我们都认为“不清楚”的说法更现实。如果您遗漏了第一句话,或者说“%1 应该是 hello.py,但 Python 因复杂原因无法填写”,则不会出现此评论线程。

以上是关于OSError: [WinError 193] %1 不是有效的 Win32 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

OSError: [WinError 740] 请求的操作需要提升

“OSError: [WinError 1455]页面文件太小,无法完成操作。”解决方案

Python - OSError: [WinError 17] 系统无法将文件移动到不同的磁盘驱动器:

OSError: [WinError 123] 当我创建 kfp 组件时

OSError:Windows 10 中的 [WinError 10013] 错误

Python 作为 Windows 服务运行:OSError: [WinError 6] 句柄无效