python3.6上的tkinter在arch上具有多个版本

时间:2018-12-29 09:36:10

标签: python linux archlinux python-venv

我正在尝试测试tensorflow对象检测。因为tensorflow需要python3.6并且我的系统默认安装了python3.7.1,所以我从源代码构建了python3.6.7。然后,我使用python3.6.7创建了一个venv并安装了我的所有依赖项,但是当尝试导入matplotlib并得到以下错误时,我最终遇到了错误:

  File "detection.py", line 9, in <module>
    from matplotlib import pyplot as plt
  File "/home/johnmadden/repos/tfobj/lib/python3.6/site-packages/matplotlib/pyplot.py", line 2374, in <module>
    switch_backend(rcParams["backend"])
  File "/home/johnmadden/repos/tfobj/lib/python3.6/site-packages/matplotlib/pyplot.py", line 207, in switch_backend
    backend_mod = importlib.import_module(backend_name)
  File "/home/johnmadden/repos/tfobj/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/home/johnmadden/repos/tfobj/lib/python3.6/site-packages/matplotlib/backends/backend_tkagg.py", line 1, in <module>
    from . import _backend_tk
  File "/home/johnmadden/repos/tfobj/lib/python3.6/site-packages/matplotlib/backends/_backend_tk.py", line 5, in <module>
    import tkinter as Tk
  File "/usr/local/lib/python3.6/tkinter/__init__.py", line 36, in <module>
    import _tkinter # If this fails your Python may not be configured for Tk
ModuleNotFoundError: No module named '_tkinter'

我在网上看了看,发现我需要用以下命令安装tk

pacman -S tk

我仍然遇到相同的错误,但是当我转到python3.7.1时,它成功导入。我认为它正在尝试为python3.7.1而不是python3.6.7安装它。我知道在ubuntu上人们可以做到

sudo apt-get install python3-tk

如何在拱门上完成?

2 个答案:

答案 0 :(得分:0)

发现我的问题,我在安装tk之前创建了venv,因此它仍然丢失。我只是重新创建了虚拟环境。

答案 1 :(得分:0)

实际答案是tensorflow不需要python 3.6-Arch Linux提供了一个tensorflow软件包,该软件包已被修补以针对python 3.7构建,您应该使用它。如果您构建自己的python和tensorflow,则冒着混淆部分或全部安装的风险(在这种情况下,将无法正确设置tkinter)。

您应该始终做的第一件事是检查所需的软件是否已在发行版本存储库中提供-如果已安装,则该软件包肯定旨在与那些发行版本存储库提供的生态系统一起使用。

在这种情况下,您可以看到tensorflow软件包具有许多修补程序来修复python 3.7上的构建失败:https://git.archlinux.org/svntogit/community.git/tree/trunk/PKGBUILD?h=packages/tensorflow&id=ef98a003237250ba0853990da1742ee27c0e554d#n37