2017-10-06 86 views
0

我在我的python 3 docker容器中遇到了tk問題。爲什麼conda安裝tk不能在我的Docker容器中工作,即使它說它安裝了?

我想:

conda install tk 

,但它說,它沒有安裝它

[email protected]:/home_simulation_research/overparametrized_experiments/pytorch_experiments# conda install tk 
Fetching package metadata ........... 
Solving package specifications: . 

# All requested packages already installed. 
# packages in environment at /opt/conda: 
# 
tk      8.6.7    h5979e9b_1 

,但是當我去到Python,並嘗試將其導入它不起作用:

>>> import Tkinter 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named 'Tkinter' 

等錯誤:

>>> import tkinter 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/opt/conda/envs/pytorch-py35/lib/python3.5/tkinter/__init__.py", line 35, in <module> 
    import _tkinter # If this fails your Python may not be configured for Tk 
ImportError: libX11.so.6: cannot open shared object file: No such file or directory 

當我運行需要它的腳本:

Traceback (most recent call last): 
    File "bulk_experiment_dispatcher.py", line 18, in <module> 
    from data_file import * 
    File "/home_simulation_research/overparametrized_experiments/pytorch_experiments/data_file.py", line 16, in <module> 
    import matplotlib.pyplot as plt 
    File "/opt/conda/envs/pytorch-py35/lib/python3.5/site-packages/matplotlib/pyplot.py", line 115, in <module> 
    _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup() 
    File "/opt/conda/envs/pytorch-py35/lib/python3.5/site-packages/matplotlib/backends/__init__.py", line 32, in pylab_setup 
    globals(),locals(),[backend_name],0) 
    File "/opt/conda/envs/pytorch-py35/lib/python3.5/site-packages/matplotlib/backends/backend_tkagg.py", line 6, in <module> 
    from six.moves import tkinter as Tk 
    File "/opt/conda/envs/pytorch-py35/lib/python3.5/site-packages/six.py", line 92, in __get__ 
    result = self._resolve() 
    File "/opt/conda/envs/pytorch-py35/lib/python3.5/site-packages/six.py", line 115, in _resolve 
    return _import_module(self.mod) 
    File "/opt/conda/envs/pytorch-py35/lib/python3.5/site-packages/six.py", line 82, in _import_module 
    __import__(name) 
    File "/opt/conda/envs/pytorch-py35/lib/python3.5/tkinter/__init__.py", line 35, in <module> 
    import _tkinter # If this fails your Python may not be configured for Tk 
ImportError: libX11.so.6: cannot open shared object file: No such file or directory 

我試圖apt-get install python-tk(從Install tkinter for Python),但它沒有工作:

[email protected]:/home_simulation_research/overparametrized_experiments/pytorch_experiments# apt-get install python-tk 
Reading package lists... Done 
Building dependency tree 
Reading state information... Done 
E: Unable to locate package python-tk 

我試圖運行ENTERYPOINT爲一體建議的答案,但它給我多了一些錯誤:

/path/fake_gui.sh: 8: /home_simulation_research/overparametrized_experiments/docker_files/runtime/fake_gui.sh: source: not found 
/path/fake_gui.sh: 12: /home_simulation_research/overparametrized_experiments/docker_files/runtime/fake_gui.sh: function: not found 
/path/fake_gui.sh: 13: kill: invalid signal number or name: SIGTERM 
/path/fake_gui.sh: 15: /home_simulation_research/overparametrized_experiments/docker_files/runtime/fake_gui.sh: Syntax error: "}" unexpected 

,但不知道該怎麼辦...


有用的問題:

How to install python-tk in my docker image

回答

0

與Python 3,你必須導入如下:

import tkinter # with a small caps 't' 
+0

仍然引發一個錯誤,但是當然要感謝那麼重要:'import _tkinter#如果這個失敗,你的Python可能不會被配置爲Tk ImportError:libX11.so.6:無法打開共享目標文件:沒有這樣的文件或目錄「...把原始問題的整個錯誤。 –

1

您需要使用已安裝並運行virtual framebuffer的Docker容器。

blog post解釋了將X11放入碼頭集裝箱的「原因和方法」。

你可以看到他們是如何通過他們的entry_point.sh做它在硒多克爾容器:

#!/bin/bash 
# 
# IMPORTANT: Change this file only in directory Standalone! 

source /opt/bin/functions.sh 

export GEOMETRY="$SCREEN_WIDTH""x""$SCREEN_HEIGHT""x""$SCREEN_DEPTH" 

function shutdown { 
    kill -s SIGTERM $NODE_PID 
    wait $NODE_PID 
} 

if [ ! -z "$SE_OPTS" ]; then 
    echo "appending selenium options: ${SE_OPTS}" 
fi 

SERVERNUM=$(get_server_num) 

rm -f /tmp/.X*lock 

xvfb-run -n $SERVERNUM --server-args="-screen 0 $GEOMETRY -ac +extension RANDR" \ 
    java ${JAVA_OPTS} -jar /opt/selenium/selenium-server-standalone.jar \ 
    ${SE_OPTS} & 
NODE_PID=$! 

trap shutdown SIGTERM SIGINT 
wait $NODE_PID 

來源爲上面的代碼是在GitHub上,SeleniumHQ/docker-selenium這個倉庫。

+0

對不起,我有點困惑,這是如何在python中安裝'tkinter'? –

+0

的Tkinter一般是默認安裝的,但只是因爲它的安裝並不意味着你可以使用它。你得到的錯誤是因爲有你的搬運工容器內沒有圖形用戶界面。 – blakev

+0

不知道什麼是錯,但它扔給我一對夫婦奇怪的錯誤的。我想將已經包括了:'源:沒有found','功能:不found','殺:無效的信號編號或名稱:SIGTERM'和'語法錯誤: 「}」 unexpected'。你知道如何解決這個問題嗎? –

0

好了,所以有一次我把一個虛擬屏幕上的圖像在它停止崩潰:

RUN apt-get update 
RUN apt-get install -y xvfb 
#RUN Xvfb :1 -screen 0 1024x768x16 &> xvfb.log & 

,當我跑我的碼頭工人的形象。

相關問題