【问题标题】:python docker throws error: AttributeError: module 'six' has no attribute 'PY34'python docker抛出错误:AttributeError:模块'six'没有属性'PY34'
【发布时间】:2019-12-17 10:43:30
【问题描述】:

我正在编写一个脚本,它将构建 docker 映像,然后将映像推送到 ECR。 我当前的 python 版本是

>python --version
Python 3.8.0

所以,出于某种原因,在本地运行我的 python 时,在第一行,我遇到了错误。也就是说,它还没有构建要推送到 ECR 的映像。

import docker --> 抛出错误

Traceback (most recent call last):
  File "genericECR.py", line 1, in <module>
    import docker
  File "C:\Users\AppData\Local\Programs\Python\Python38-32\lib\site-packages\docker\__init__.py", line 2, in <module>
    from .api import APIClient
  File "C:\Users\AppData\Local\Programs\Python\Python38-32\lib\site-packages\docker\api\__init__.py", line 2, in <module>
    from .client import APIClient
  File "C:\Users\AppData\Local\Programs\Python\Python38-32\lib\site-packages\docker\api\client.py", line 8, in <module>
    import websocket
  File "C:\Users\AppData\Local\Programs\Python\Python38-32\lib\site-packages\websocket\__init__.py", line 23, in <module>
    from ._app import WebSocketApp
  File "C:\Users\AppData\Local\Programs\Python\Python38-32\lib\site-packages\websocket\_app.py", line 36, in <module>
    from ._core import WebSocket, getdefaulttimeout
  File "C:\Users\AppData\Local\Programs\Python\Python38-32\lib\site-packages\websocket\_core.py", line 34, in <module>
    from ._handshake import *
  File "C:\Users\AppData\Local\Programs\Python\Python38-32\lib\site-packages\websocket\_handshake.py", line 40, in <module>
    if six.PY34:
AttributeError: module 'six' has no attribute 'PY34'

已经安装了六个

Requirement already satisfied: six in c:\users\appdata\local\programs\python\python38-32\lib\site-packages (1.6.1)

它似乎是为 python 34 设计的,所以对于 python 38,我该如何解决这个问题?

【问题讨论】:

  • 容器内的python是什么版本?
  • 3.8.但我的问题是,如果我尝试在本地运行 python 脚本,它会引发错误,即 6 没有属性 PY34。

标签: python docker six


【解决方案1】:

很可能six 版本不够高,c.f. https://github.com/docker/docker-py/issues/2294

先查六个版本:

import six
print(six.__version__)

如果六版本不是>=1.0.0,则升级六,在命令行上

python -m pip install -U six

使用最新的pip,您应该会看到:

>>> import six
>>> six.__version__
'1.13.0'
>>> six.PY34
True

【讨论】:

  • 你是对的,我有 1.6.1 版本。它有另一个 python 包依赖项。因此,当我升级六个时,我收到错误:pystreams 0.6 有要求 6==1.6.1,但您将有六个不兼容的 1.13.0。但无论如何,升级后它正在工作。再次感谢。
  • 哎哟streams 看起来已经过时了,github.com/9seconds/streams 3-6 年没有新的提交。如果没有必要,你不应该依赖它=)
【解决方案2】:

它有帮助,我在运行 docker-compose 时遇到了问题,该命令有帮助: python -m pip install -U 六

【讨论】:

  • 欢迎来到 Stack Overflow。与其感谢您的帖子,不如对真正帮助您的答案进行投票。 (这样其他用户也一目了然,尝试哪种解决方案)
猜你喜欢
  • 2020-03-02
  • 2011-06-19
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
  • 2017-08-24
  • 1970-01-01
相关资源
最近更新 更多