在Redhat 7和python3.6上

我可以导入tkinter而不会出现任何错误:

Python 3.6.5 (default, Jul 25 2018, 21:22:33)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tkinter
>>>

在新的virtualenv中
Python 3.6.4 (default, Jul 20 2018, 12:22:32)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tkinter
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/ocr1/CRNN_Tensorflow/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'
>>>

附言这是一个全新的virtualenv,由virtualenv <name_of_env>命令创建。

最佳答案

我发现了最终解决问题的两种不同方法。

1.确保创建的virtualenv使用相同的python版本

从我上面的案例来看,virtualenv版本的python是Python 3.6.4,但是我机器的python版本实际上是Python 3.6.5。

因此,virtualenv <name_of_env>是使用Python 3.6.4的lib创建的。解决这个问题可以用
virtualenv -p <PYTHON_EXE>, --python=PYTHON_EXE <name_of_env>
要么
virtualenv --python=<PYTHON_EXE> <name_of_env>
指定python exe位置。

并使用选项--system-site-packages包含系统模块。 (以上为Rob T.的回答)

2.直接从lib复制所需的软件包

这种方法实际上有点棘手。只需进入机器python lib目录并将所需的软件包复制到virtualenv python lib目录

例如。:
cd /usr/lib/python3.6.5cp -a ./tkinter /my_project/venv/lib/

关于python-3.x - RHEL7导入tkinter在virtualenv内失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51981132/

10-09 20:15
查看更多