[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
(本頁面已被瀏覽過 243 次)