[Python] 在 Docker CentOS 7.0 容器裡,安裝 pip 遇到語法錯誤?

[Python] 在 Docker CentOS 7.0 容器裡,安裝 pip 遇到語法錯誤?

最近因為重裝了 Ubuntu,系統的 Docker 映像檔都消失了,

因此今天想要來重建專案編譯用的映像檔。

結果,在 CentOS 7.0 上,想要執行 RUN easy_install pip 這行時,

卻出現了詭異的語法錯誤 SyntaxError: invalid syntax:

Step 10/68 : RUN easy_install pip
 ---> Running in 25c78c0ecf9f
Searching for pip
Reading https://pypi.python.org/simple/pip/
Best match: pip 21.0.1
Downloading https://files.pythonhosted.org/packages/b7/2d/ad02de84a4c9fd3b1958dc9fb72764de1aa2605a9d7e943837be6ad82337/pip-21.0.1.tar.gz#sha256=99bbde183ec5ec037318e774b0d8ae0a64352fe53b2c7fd630be1d07e94f41e5
Processing pip-21.0.1.tar.gz
Writing /tmp/easy_install-CIdX3e/pip-21.0.1/setup.cfg
Running pip-21.0.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-CIdX3e/pip-21.0.1/egg-dist-tmp-5nLd35

  File "build/bdist.linux-x86_64/egg/pip/_internal/commands/cache.py", line 157
    results.append(f' - {wheel} ({size})')
                                        ^
SyntaxError: invalid syntax

  File "build/bdist.linux-x86_64/egg/pip/_internal/commands/configuration.py", line 224
    env_var = f'PIP_{key.upper()}'
                                 ^
SyntaxError: invalid syntax

 

上面的 f'PIP_{key.upper()}' 顯然是 Python 3 的 f-strings 語法,

但我 Docker 裡安裝的明明是 Python 2.7 呀?

 

推測可能是因為 Python 2.7 的支援已經過期,

因此 easy_install 安裝 pip 時,新版的 pip 直接改用了 Python 3 的語法,

導致 Python 2 執行時會遇到這個語法錯誤…

 

後來將 Dockerfile 裡的 RUN easy_install pip 那行,改成下面這樣就行了,

它會安裝 pip 20.3.4,避開了 pip 21 不支援 Python 2 的問題:

RUN wget https://bootstrap.pypa.io/pip/2.7/get-pip.py && python get-pip.py

 

參考資料:Installation – pip documentation v21.0.1

(本頁面已被瀏覽過 202 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料