【问题标题】:'importlib._bootstrap' has no attribute 'SourceLoader'“importlib._bootstrap”没有属性“SourceLoader”
【发布时间】:2016-01-26 17:11:50
【问题描述】:

我正在尝试使用 cx_freeze 和 esky 构建应用程序。它以前可以工作(好吧,也许几个月前。从那时起,python 3.5 就出来了)。

我有以下异常:

File "/usr/lib/python3.5/site-packages/esky/util.py", line 578, in compile_to_bytecode
    loader = importlib._bootstrap.SourceLoader()    
AttributeError: module 'importlib._bootstrap' has no attribute 'SourceLoader'

我正在使用:

  • Python 3.5.0
  • 来自 pypi 的 Esky 0.9.9(最新)
  • cx_freeze 4.3.4-2

我在 Manjaro (Linux) 上。我不知道问题出在哪里。请帮帮我好吗?

【问题讨论】:

    标签: python cx-freeze esky


    【解决方案1】:

    运行这个命令,它会解决你的问题

    python3 -m ensurepip --upgrade
    

    【讨论】:

      【解决方案2】:

      我可以通过运行来解决这个问题:

      pip3 uninstall setuptools
      pip3 install setuptools
      

      【讨论】:

        【解决方案3】:

        我今天遇到了同样的问题。

        在终端中运行以下命令解决了我的问题。

        ➜  ~ pip install --upgrade pip
        ➜  ~ pip install --upgrade virtualenvwrapper
        ➜  ~ mkvirtualenv -p /usr/local/bin/python3 test_env
        

        【讨论】:

          【解决方案4】:

          嗯,查看源代码可能有一个错误:

          if sys.version_info[:2] < (3, 1):
              bytecode = imp.get_magic() + struct.pack("<i", 0)
              bytecode += marshal.dumps(compile(source_code, compile_filename, "exec"))
          elif sys.version_info[:2] < (3, 4):
              bytecode = imp.get_magic() + struct.pack("<ii", 0, 0)
              bytecode += marshal.dumps(compile(source_code, compile_filename, "exec"))
          else:
              loader = importlib._bootstrap.SourceLoader()    
              code = loader.source_to_code(source_code, '<string>')
              bytecode = importlib._bootstrap._code_to_bytecode(code, mtime=0, source_size=0)
          

          您可以尝试将那行替换为:

          loader = importlib._bootstrap_external.SourceLoader()

          如果可行,请尝试使用低于 3.5 的版本并在其 github 问题页面中提交错误。

          【讨论】:

          • 嗯,它仍然不起作用,但另一个原因:AttributeError: module 'importlib._bootstrap' has no attribute '_code_to_bytecode' 在同一文件的第 580 行。好一点,我们提前了两行:)
          • 是的,因为那行也得改成'bytecode = importlib._bootstrap_external._code_to_bytecode(code, mtime=0, source_size=0)
          • 这只是一个修补程序,可能更多的东西不会起作用,所以我认为它在python3.5中有点bug或者它有一些问题
          • 好吧对不起,我真的没想到。通过最后的更改,它确实可以正确构建。但是,正如您所说,更多的事情不起作用:当我尝试运行“编译”程序时,我得到:ImportError: No module named '_frozen_importlib_external' Fatal Python error: Py_Initialize: importlib install failed。这应该怪谁? Python 3.5 ?
          • 是的,我认为它与 python3.5 不兼容,但快速浏览一下源代码,我认为您可以尝试 python3.4。会不会有问题?
          猜你喜欢
          • 2018-03-12
          • 2019-07-02
          • 2017-11-29
          • 1970-01-01
          • 1970-01-01
          • 2021-01-08
          • 1970-01-01
          相关资源
          最近更新 更多