【问题标题】:Cannot import distutils from within a py2exe-compiled script无法从 py2exe 编译的脚本中导入 distutils
【发布时间】:2014-09-09 15:44:37
【问题描述】:

我在 Windows Server 2012R2 上,尝试在 virtualenv 中使用 py2exe 编译脚本,每当其中一个应用程序脚本尝试“导入 distutils”时,我都会遇到问题(在我的情况下,它位于 3rd -party 库,但我在这里减少了问题)。

重现步骤:

  • 创建一个虚拟环境

    virtualenv venv
    call venv\Scripts\activate
    
  • 在 virtualenv 中安装 py2exe

    easy_install --always-unzip py2exe-0.6.9.win64-py2.7.amd64.exe
    
  • 创建 setup.py

    from distutils.core import setup
        try:
            import py2exe
        except:
            pass
    
    setup(
        console=[
            'py2exe_distutils.py'
        ]
    )
    
  • 创建 py2exe_distutils.py

    import distutils
    
  • 运行py2exe

    python setup.py py2exe
    
  • 尝试运行生成的可执行文件

    dist\py2exe_distutils.exe
    

返回:

    C:\Users\root\p\dist\library.zip\distutils\__init__.py:14: UserWarning: The virtualenv distutils package at %s appears to be in the same location as the system distutils?
    Traceback (most recent call last):
      File "py2exe_distutils.py", line 6, in <module>
        import distutils
      File "distutils\__init__.pyc", line 25, in <module>
    ImportError: cannot import name dist

当我直接运行脚本 (python py2exe_distutils.py) 时,脚本运行良好,即使在 virtualenv 中也是如此。

我是在尝试做 py2exe 不支持的事情,还是我的设置有问题?

【问题讨论】:

  • 只有当您尝试从 virtualenv 编译时才会发生这种情况?我自己无法重现这种行为。不过,我认为我使用的 py2exe 版本比您的显示要新-您可以通过 svn over on sourceforge 获得最新版本。另外,您对python setup.py py2exe 的调用的输出是什么样的?

标签: python virtualenv py2exe distutils


【解决方案1】:

我在创建使用pandas 0.12.0 的可执行文件时遇到了同样的问题。这对我有用:在创建可执行文件之前,从基本 python 安装中复制 distutils 文件夹

robocopy C:\Python27\Lib\distutils venv\Lib\distutils /E /COPY:DAT

我在 Windows 7 Professional 上使用 virtualenv 12.0.4 和 py2exe 0.6.6。可以在here 找到一些额外的见解。 This answer 向我指出了仅复制文件的方向。

【讨论】:

    猜你喜欢
    • 2014-12-15
    • 2021-07-03
    • 1970-01-01
    • 2020-12-28
    • 2016-08-08
    • 2020-04-15
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    相关资源
    最近更新 更多