尝试使用virtualenv中基于TKinter的小部件运行python代码。
user@computer:~/myproject$ env/bin/python Python
2.7.3 (default, Sep 26 2012, 21:51:14) [GCC 4.7.2] on linux2 Type "help", "copyright", "credits" or "license" for more information.
>>> import Tkinter
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 42, in <module>
raise ImportError, str(msg) + ', please install the python-tk package' ImportError: No module named _tkinter, please install the python-tk package
将TK安装到virtualenv的正确方法是什么?
答案 0 :(得分:41)
在activate
脚本中设置环境变量TCL_LIBRARY。在Windows(带有Tcl 8.5的Python 2.7)上,只需将此行添加到Scripts\activate.bat
:
set "TCL_LIBRARY=C:\Python27\tcl\tcl8.5"
@Jasper van den Bosch的编辑:在Ubuntu上,对脚本activate
的修改如下:
TK_LIBRARY=/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/site-packages/PIL:/usr/lib
TKPATH=/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/site-packages/PIL:/usr/lib
TCL_LIBRARY=/usr/lib
export TCL_LIBRARY TK_LIBRARY TKPATH
上找到对此的引用
答案 1 :(得分:8)
我在运行linux mint的机器上使用python2.7和virtualenv。 当我在virtualenv中运行需要matplotlib的应用程序时,我收到了OP提到的完全相同的错误。 &#34; ImportError:没有名为_tkinter的模块,请安装python-tk包&#34;
我最后使用上述帖子中的建议删除并重新创建了我的虚拟环境。以下是我的步骤:
pip freeze > requirements.txt
deactivate
sudo apt-get install python-tk
virtualenv <nameofyourenv> --system-site-packages
source <virtual environment folder>/bin/activate
pip install -r <path to requirements.txt file>
现在,当我运行与以前相同的代码时,导入_tkinter没有问题。希望这可以帮助!感谢上面的每个人的建议。这对我帮助很大。
答案 2 :(得分:7)
我设法通过tkinter
文件夹将symlink tkinter
在python3中与virtualenv集成到virtualenv python3
。我为我工作。但我不知道这是不是正确的方式。
sudo apt-get install python3-tk
cd ~/.virtualenvs/cv/lib/python3.4/
ln -s /usr/lib/python3.4/tkinter tkinter
希望这有帮助。
答案 3 :(得分:5)
这真是对A. Rodas与Python 3.4和Tcl 8.6(我没有足够的声誉点评论)的完美答案的更新。
在激活脚本中设置环境变量TCL_LIBRARY。在Windows(带有Tcl 8.6的Python 3.4)上,只需将此行添加到Scripts \ activate.bat:
set "TCL_LIBRARY=C:\Python34\tcl\tcl8.6"
我在虚拟环境中使用Windows 7,Python 3.4和ggplot时遇到过这个问题。
答案 4 :(得分:1)
要在PowerShell中使用此功能,您必须编辑activate.ps1文件而不是activate.bat。只需将以下内容添加到activate.ps1:
$env:TCL_LIBRARY = "C:\Python27\tcl\tcl8.5"
答案 5 :(得分:1)
克隆cpython项目
git clone git@github.com:python/cpython.git
cd
到cpython目录。
git checkout
所需的虚拟环境版本(对我来说是3.4),
并用
./configure
make
make test
sudo make install
您将在_tkinter.cpython-xxx.so
目录的子目录中找到一个so文件build/
,并将其复制到venv的lib-dynload
目录中。 (对我来说是~/tf1.1py3.4/lib/python3.4/lib-dynload/
)
答案 6 :(得分:0)
也是A.Rodas回答的更新 - 我尝试使用Windows Powershell在Windows 7中执行此操作,但无法完成此操作(我也没有足够的声誉点来评论
即使我添加了这条线,我也意识到了
set "TCL_LIBRARY=C:\Python27\tcl\tcl8.5"
和tk库相对应的那个,到activate.bat
脚本,tcl链接没有得到更新,我需要做的只是去它寻找tcl文件的目录,并将相应的tcl和tk文件复制到该目录。现在该文件位于默认位置,因此您无需在每次创建新环境时更新activate.bat
答案 7 :(得分:0)
对我来说,解决方案是从
复制文件夹tclC:\Users\{myUser}\Python3.5\tcl
到
C:\Users\{myUser}\{myVirtualEnv}
将{myUser}和{myVirtualEnv}替换为您的特定目录名称。
答案 8 :(得分:0)
以防万一,这些人在阅读完所有答案后会scratch不休-似乎还需要重新创建您的virtualenv,以防在安装python3.6-tk
之前创建了它。指定TK_PATH
和TCL_PATH
的解决方案似乎都不起作用,即使在虚拟环境之外使用tkinter给出的路径时也是如此(请参见this post)。当然,只需删除venv并创建一个新的。