[英]TKinter in a Virtualenv
嘗試使用來自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的正確方法是什么?
在activate
腳本中設置環境變量TCL_LIBRARY。 在Windows(帶有Tcl 8.5的Python 2.7)上,只需將此行添加到Scripts\\activate.bat
:
set "TCL_LIBRARY=C:\Python27\tcl\tcl8.5"
@Jasper范登博世編輯:在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
對此的參考可以在askubuntu上的這個問題上找到
我在運行linux mint的計算機上將python2.7與virtualenv一起使用。 當運行在我的virtualenv中需要matplotlib的應用程序時,我收到了與OP完全相同的錯誤。 “ ImportError:沒有名為_tkinter的模塊,請安裝python-tk軟件包”
我最終使用以上帖子中的建議刪除並重新創建了虛擬環境。 這是我的步驟:
pip freeze > requirements.txt
deactivate
: sudo apt-get install python-tk
安裝python-tk: 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>
文件恢復先前凍結的所有軟件包: pip install -r <path to requirements.txt file>
文件的pip install -r <path to requirements.txt file>
現在,當我運行與以前相同的代碼時,導入_tkinter沒問題。 希望這可以幫助! 感謝以上每個人的建議。 確實對我有很大幫助。
我管理整合tkinter
在python3通過向VIRTUALENV symlink tkinter
文件夾virtualenv python3
。 我為我工作。 但是我不知道這是不是正確的方法。
sudo apt-get install python3-tk
cd ~/.virtualenvs/cv/lib/python3.4/
ln -s /usr/lib/python3.4/tkinter tkinter
希望這可以幫助。
在更高版本的python中,這可能會導致
ModuleNotFoundError: No module named '_tkinter'
在這種情況下,請確保也進行符號鏈接
/usr/lib/python3.x/lib-dynload/_tkinter.cpython-36m-x86_64-linux-gnu.so
作為path/to/virtualenv/lib/python3.x/lib-dynload/_tkinter.cpython-36m-x86_64-linux-gnu.so
使用
ln -s /usr/lib/python3.x/lib-dynload/_tkinter.cpython-36m-x86_64-linux-gnu.so _tkinter.cpython-36m-x86_64-linux-gnu.so
從您的virtualenv lib/python3.x/lib-dynload/
目錄中。
這實際上是對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時遇到了這個問題。
要使此功能在Powershell中運行,您必須編輯activate.ps1文件而不是activate.bat。 只需添加以下內容即可激活$env:TCL_LIBRARY = "C:\\Python27\\tcl\\tcl8.5"
: $env:TCL_LIBRARY = "C:\\Python27\\tcl\\tcl8.5"
克隆cpython項目
git clone git@github.com:python/cpython.git
cd
到cpython目錄。 git checkout
所需的虛擬環境版本(對我來說是3.4),並使用
./configure
make
make test
sudo make install
您將在build/
目錄的_tkinter.cpython-xxx.so
中找到一個_tkinter.cpython-xxx.so
文件,然后將其復制到venv的lib-dynload
目錄中。 (對我來說是~/tf1.1py3.4/lib/python3.4/lib-dynload/
)
也是A.Rodas的答案的更新-我曾嘗試在Windows 7中使用Windows Powershell進行此操作,但無法完成(我也沒有足夠的信譽點來發表評論
即使將行set "TCL_LIBRARY=C:\\Python27\\tcl\\tcl8.5"
和對應的tk庫添加到了activate.bat
腳本中,我仍然意識到,tcl鏈接沒有得到更新,我要做的只是轉到要查找tcl文件的目錄,然后將相應的tcl和tk文件復制到該目錄。 現在該文件位於默認位置,因此您無需在每次創建新環境時都更新activate.bat
對我來說,解決方案是從復制文件夾tcl
C:\Users\{myUser}\Python3.5\tcl
至
C:\Users\{myUser}\{myVirtualEnv}
將{myUser}和{myVirtualEnv}替換為您的特定目錄名稱。
萬一這有助於那些在閱讀完所有答案后python3.6-tk
似乎還需要重新創建您的virtualenv,以防在安裝python3.6-tk
之前創建了它。 指定TK_PATH
和TCL_PATH
的解決方案似乎都不起作用,即使在虛擬環境之外使用TCL_PATH
給出的路徑時也是如此(請參閱本文 )。 當然,只需刪除venv並創建一個新的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.