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】:我的问题涉及poetry
和argparse
。
我用这样的参数调用脚本:
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
问候 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 组件时