使用Py2exe时出现访问被拒绝的错误

14

我正在使用 Py2exe 创建一个作为 Windows 服务的可执行文件。

运行脚本时,我遇到了以下错误:

File "C:\TeamCity\buildAgent\work\582d895bd5b431ac\winpython\WinPython-32bit-2.7.3.3\python-2.7.3\lib\site-packages\py2exe\build_exe.py", line 860, in build_executable add_resource(ensure_unicode(exe_path), script_bytes, u"PYTHONSCRIPT", 1, True) RuntimeError: EndUpdateResource: Access is denied.

这是调用 Py2exe 的命令:

    setup(
    name = NAME,
    description = DESCRIPTION,
    version = '1.0.133.43',
    service = [{'modules':["ServiceLauncher"], 'cmdline':'pywin32'}],
    zipfile=None,
    options = {
        "py2exe":{"packages":"encodings",
                  "includes":"win32com,win32service,win32serviceutil,win32event",
                  "excludes":"libiomp5md.dll"
        },
        },
    )

这个问题只发生在编译机上,在我的开发PC上运行正常。

我尝试将工作文件夹设置为每个人的完全控制权限,但没有起作用。

有什么想法吗?

谢谢。


出于好奇,如果可能的话,请尝试使用较短的路径名。在Windows中,当路径太长时会出现奇怪的错误。 - Torxed
我正在以管理员身份运行。 我尝试了一个更短的路径,但没有成功... - Be.St.
你可以在“事件查看器”中检查你的 AUTH 日志,或许会有所发现。 - Torxed
简单的方法是一次只删除一个 includes,然后查看哪个先失败,以缩小范围。 - Torxed
我已经尝试过删除包含文件,逐个添加一个。还删除了包和排除文件,但是仍然出现相同的错误! - Be.St.
显示剩余3条评论
5个回答

41

经过两天的调查,我们在IT员工的帮助下找到了解决方案。

问题出现在py2exe试图修改可执行文件并添加元数据和/或图标时。

根本原因?简单... 就是杀毒软件。

它认为这个操作是一种威胁,并导致访问被拒绝的错误。

谢谢大家!


谢谢您的回答。我遇到了同样的问题,通过谷歌搜索找到了这个答案,禁用了杀毒软件,再次运行程序,一切都很好。总共用时1分钟。这可能为我节省了数小时的时间! - John Lyon
4
如果您无法关闭防病毒软件,运行构建过程(py2exe)两次可能会有帮助。这对我有用,因为第一次它生成了library.zip并失败了。第二次,它能够成功生成可执行文件。 - syam
@syam 谢谢你提到这个 =) - thclpr
完美的答案!由于我的杀毒软件没有弹出任何警告/错误,我不会很快想到这个。 - pHiL

3

问题很可能是杀毒软件阻止了对 .exe 文件的写入访问,正如其他人所指出的那样。如果您不能或不想禁用杀毒软件,则可以在您的 setup.py 文件开头使用以下补丁来在修改之前将文件重命名以避免 .exe 扩展名,并在修改后将其重命名回来。

import py2exe.py2exe_util
from py2exe.py2exe_util import add_resource
import os

def add_resource_patch(name, *arg, **kwarg):
    name_tmp = name + '.tmp'
    os.rename(name, name_tmp)
    add_resource(name_tmp, *arg, **kwarg)
    os.rename(name_tmp, name)

py2exe.py2exe_util.add_resource = add_resource_patch

from distutils.core import setup
import py2exe
setup(...)

这个方法在其他方法都无效时对我很有用。它也很好,因为它可以永久性地修复问题并从我的流程中删除暂停和恢复步骤。 - Boergler

1
我发现断开互联网连接就足以解决问题(尽管这可能与禁用所提出的防病毒解决方案有关)。

0

另一个可能的解决方案是您已经有一个包含文件的dist文件夹 - 我也是这样做的(忘记我已经运行过py2exe)。删除该文件夹后,它再次正常工作。


这并没有提供问题的答案。如果要对作者进行批评或请求澄清,请在他们的帖子下留言。-【来自审查】 - Fabio Lamanna
@FabioLamanna 我遇到了与作者类似的问题,这是一个对我有效的解决方案。对于其他可能会遇到这篇文章的人来说,这是一个很好的资源。 - Jona

0

如果您在C:\Users文件夹下使用文件夹,则可能会出现问题。显然,Windows不喜欢这样做。只需将文件移动到另一个文件夹中,然后从该文件夹运行pyinstaller即可解决问题。我将我的Python脚本移动到了C:\Temp文件夹下,它可以完美地工作,在C:\Users下,即使以管理员身份运行cmd也会出现相同的权限问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接