簡體   English   中英

Virtualenv中的TKinter

[英]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軟件包”

我最終使用以上帖子中的建議刪除並重新創建了虛擬環境。 這是我的步驟:

  1. 如果您的虛擬環境已激活,請運行以下命令將需求凍結到一個文件中,您以后可以訪問該文件: pip freeze > requirements.txt
  2. 如果您的虛擬環境已激活,請使用以下方式將其deactivate
  3. 刪除您的virtualenv文件夾。
  4. 使用以下sudo apt-get install python-tk安裝python-tk: sudo apt-get install python-tk
  5. 使用以下命令重新創建您的virtualenv: virtualenv <nameofyourenv> --system-site-packages
  6. 接下來,激活您的virtualenv: source <virtual environment folder>/bin/activate
  7. 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 我為我工作。 但是我不知道這是不是正確的方法。

  1. 安裝tkinter
sudo apt-get install python3-tk
  1. 轉到您的virtualenv的python lib文件夾
cd ~/.virtualenvs/cv/lib/python3.4/
  1. 鏈接tkinter
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_PATHTCL_PATH的解決方案似乎都不起作用,即使在虛擬環境之外使用TCL_PATH給出的路徑時也是如此(請參閱本文 )。 當然,只需刪除venv並創建一個新的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM