Virtualenv: Tkinter - falha em um ambiente virtual

Criado em 14 mar. 2011  ·  12Comentários  ·  Fonte: pypa/virtualenv

Quando um virtualenv que compartilha os pacotes de sites do ambiente global é usado para o aplicativo baseado em Tk usando o Tk global.

O Tkinter não pode inicializar corretamente em um virtualenv, pois falha em pesquisar corretamente seus recursos - que ainda estão no ambiente global python.

\Documents and Settings\Roger\Desktop\windows-install-bits>cd \venvtest

C:\venvtest>Scripts\activate.bat
(venvtest) C:\venvtest>python
Python 2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import Tkinter
>>> f= Tk()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'Tk' is not defined
>>> f= Tkinter.Tk()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\Python26\Lib\lib-tk\Tkinter.py", line 1643, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, want
objects, useTk, sync, use)
_tkinter.TclError: Can't find a usable init.tcl in the following directories:
    c:/Python26/lib/tcl8.5 c:/venvtest/lib/tcl8.5 c:/lib/tcl8.5 c:/venvtest/libr
ary c:/library c:/tcl8.5.2/library c:/tcl8.5.2/library



This probably means that Tcl wasn't installed properly.

>>> ^Z


(venvtest) C:\venvtest>deactivate

O que eu esperaria é que um ambiente virtual funcionasse da mesma forma que o ambiente global: -

C:\venvtest>c:\Python26\python.exe
Python 2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import Tkinter
>>> f = Tkinter.Tk()
>>> ^Z


C:\venvtest>

Após alguma experimentação, descobri que copiar os diretórios c: \ python26 \ tcl {tcl, tk} 8.5 para c: \ venvtest \ Libs resolve os problemas.


bug

Comentários muito úteis

Ainda é um problema no virtualenv 15.0.1.
... apenas dizendo'

Todos 12 comentários

Na verdade, uma maneira melhor de corrigir isso seria definir o caminho TCL_LIBRARY em
activate.bat ou mude FixTk.py para saber sobre o virtualenv.


Original Comment By: Roger Gammans

Eu também estou apenas definindo o caminho da variável de ambiente TCL_LIBRARY em activate.bat. Então, tudo que o virtualenv precisa fazer é adicionar essa linha para activate.bat automagicamente.

Há uma discussão sobre stackoverflow neste problema:
http://stackoverflow.com/questions/15884075/tkinter-in-a-virtualenv

Também acabei de definir a variável de ambiente em activate.bat. No entanto, seria ótimo se isso fosse feito automaticamente.

Ainda é um problema no virtualenv 15.0.1.
... apenas dizendo'

Este problema foi marcado automaticamente como obsoleto porque não teve atividades recentes. Ele será fechado se nenhuma outra atividade ocorrer. Basta adicionar um comentário se quiser mantê-lo aberto. Obrigado por suas contribuições.

Parece que ainda é um problema

Este problema foi marcado automaticamente como obsoleto porque não teve atividades recentes. Ele será fechado se nenhuma outra atividade ocorrer. Basta adicionar um comentário se quiser mantê-lo aberto. Obrigado por suas contribuições.

Isso ainda é um problema. Eu achei mais recentemente no Mac - a correção para https://github.com/pypa/virtualenv/issues/93 não resolveu o problema no Mac.

Alguém precisa reativar este problema. Só porque ficou parado sem puxar, não significa que não seja mais um problema. Significa apenas que os mantenedores do projeto não o priorizaram como deveriam.

No Windows, ainda é um problema com o Python 2.7, mas parece resolvido no Python 3.8 com o módulo venv .

Fique à vontade para registrar um novo problema, com a mensagem de erro, instruções de reprodução e informações sobre como você instalou o Python.

Significa apenas que os mantenedores do projeto não o priorizaram como deveriam.

Considerando que os mantenedores do projeto não são pagos, e fazem isso de graça em seu tempo pessoal, não acredito que você possa falar sobre they should . Se esse problema for um problema para você, considere preencher um PR com uma correção. Todo o código é de código aberto e está disponível gratuitamente para você.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

JoDoX picture JoDoX  ·  26Comentários

vbabiy picture vbabiy  ·  59Comentários

hyperknot picture hyperknot  ·  25Comentários

make-ing picture make-ing  ·  27Comentários

leoliu picture leoliu  ·  24Comentários