Docker中Python REPL啟動失敗

學習如何修複阻止REPL在Docker容器中啟動的Python virtualenv錯誤

寫的arjun.kaimaparambilrajan

最後發布時間:2022年5月19日

問題

當使用包含預構建Python庫的Docker容器時,Python命令會失敗,虛擬環境也不會創建。在驅動程序日誌中可以看到以下錯誤消息。

20/02/29 16:38:35 WARN PythonDriverWrapper: Failed to start repl ReplId-5b591-0ce42-78ef3-7 java.io.IOException: Cannot run program "/local_disk0/pythonVirtualEnvDirs/virtualEnv-56a5be60-3e71-486f-ac04-08e8f2491032/bin/python" (in directory "."):at org.apache.spark.util.Utils$. executecommand (Utils.scala:1367) at org.apache.spark.util.Utils$. executeandgetoutput (Utils.scala:1393) at org.apache.spark.util.Utils$. executepythonandgetoutput (Utils.scala:1367)at java.lang.Thread.run(Thread.java:748)原因:java.io.IOException: error=2,在java.lang.UNIXProcess.沒有這樣的文件或目錄。forkAndExec(本機方法)at java.lang.UNIXProcess.(UNIXProcess.java:247) at java.lang. processimple .start(processimple .java:134) at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)…17

可以在筆記本電腦中執行以下命令確認:

% sh virtualenv——no-site-packages

結果是一個類似於下麵的錯誤消息:

使用方法:virtualenv[——version][——with-traceback] [-v | -q][——discovery {builtin}] [-p py][——creator {builtin,cpython3-posix,venv}][——seed {app-data,pip}][——no-seed][——activators comma_separated_list][——clear][——system-site-packages][——symlinks |——copies][——download |——no-download][——額外搜索-dir d [d…[——pip version][——setuptools version][——wheel version][——no-pip][——no-setuptools][——no-wheel][——clear-app-data][——symlink-app-data][——prompt prompt] [-h] dest virtualenv: error:需要以下參數:dest

virtualenv命令不識別——no-site-packages選擇。

版本

該問題影響所有當前的Databricks運行時版本,但包含Conda的Databricks運行時版本除外。它會影響virtualenv庫版本20.0.0及以上。

導致

此問題是由使用Python引起的virtualenv庫版本的Docker容器中不支持——no-site-packages選擇。

Databricks運行時需要virtualenv庫,該庫支持——no-site-packages選項.中刪除了此選項virtualenv庫版本20.0.0及以上。

您可以驗證您的virtualenv通過在筆記本上運行以下命令來升級庫版本:

% sh virtualenv——版本

解決方案

可通過在安裝時指定兼容版本來解決此問題virtualenv圖書館。

例如,設置virtualenv = = 16.0.0在Dockerfile安裝virtualenv16.0.0庫版本。這個版本的庫支持所需的選項。