Erro ao executar o IPython3 no XP: TypeError: _isdir () leva exatamente 1 argumento (0 dado)

2

<UPDATE> Nunca consegui que o IPython3 funcionasse no Windows, mas consegui fazê-lo funcionar no meu servidor local do CentOS (depois de muita frustração) descobrindo o absolutamente indispensável virtualenv . Não tenho certeza se virtualenv iria trabalhar sua mágica no Windows também, mas estou satisfeito por agora usando o IPython via SSH. </UPDATE>

Sou novo no Python e decidi mergulhar com o Python 3.2. Eu adoro que a linguagem venha com um intérprete interativo integrado, mas estou procurando por algo mais completo, e o IPython parece se encaixar no projeto. Eu instalei o Distribute e costumava seguir o comando do meu diretório C: \ Python32 \ Scripts \ para obter o ovo:

easy_install http://archive.ipython.org/release/0.11/py3/ipython-0.11-py3.2.egg

Isso foi concluído com sucesso, embora a saída tenha ultrapassado meu limite de rolagem, portanto, não posso produzi-lo aqui. Eu corri ipython3 --help e produzi a tela de ajuda, então eu sei que pelo menos parte dela foi instalada corretamente. No entanto, quando executo ipython3 , recebo o seguinte erro:

$ ipython3
Error in sys.excepthook:
TypeError: _isdir() takes exactly 1 argument (0 given)

Original exception was:
Traceback (most recent call last):
  File "c:\Python32\Scripts\ipython3-script.py", line 9, in <module>
    load_entry_point('ipython==0.11', 'console_scripts', 'ipython3')()
  File "C:\Python32\lib\site-packages\ipython-0.11-py3.2.egg\IPython\frontend\terminal\ipapp.py", line 369, in launch_new_instance
    app.initialize()
  File "C:\Python32\lib\site-packages\ipython-0.11-py3.2.egg\IPython\frontend\terminal\ipapp.py", line 283, in initialize
    self.init_shell()
  File "C:\Python32\lib\site-packages\ipython-0.11-py3.2.egg\IPython\frontend\terminal\ipapp.py", line 303, in init_shell
    ipython_dir=self.ipython_dir)
  File "C:\Python32\lib\site-packages\ipython-0.11-py3.2.egg\IPython\config\configurable.py", line 295, in instance
    inst = cls(*args, **kwargs)
  File "C:\Python32\lib\site-packages\ipython-0.11-py3.2.egg\IPython\frontend\terminal\interactiveshell.py", line 112, in __init__
    user_global_ns=user_global_ns, custom_exceptions=custom_exceptions
  File "C:\Python32\lib\site-packages\ipython-0.11-py3.2.egg\IPython\core\interactiveshell.py", line 384, in __init__
    self.db = PickleShareDB(os.path.join(self.profile_dir.location, 'db'))
  File "C:\Python32\lib\site-packages\ipython-0.11-py3.2.egg\IPython\utils\pickleshare.py", line 52, in __init__
    if not self.root.isdir():
TypeError: _isdir() takes exactly 1 argument (0 given)

Diferente de --help Ainda não encontrei nenhum outro argumento que não produza esse erro. Eu usei "_isdir" em C: \ Python32 \ lib \ site-packages \ ipython-0.11-py3.2.egg \ IPython \ e encontrei apenas duas referências a ele, em um arquivo chamado tempdir.py, ambos mostrados aqui:

# XXX (ncoghlan): The following code attempts to make
# this class tolerant of the module nulling out process
# that happens during CPython interpreter shutdown
# Alas, it doesn't actually manage it. See issue #10188
_listdir = staticmethod(_os.listdir)
_path_join = staticmethod(_os.path.join)
_isdir = staticmethod(_os.path.isdir)
_remove = staticmethod(_os.remove)
_rmdir = staticmethod(_os.rmdir)
_os_error = _os.error

def _rmtree(self, path):
    # Essentially a stripped down version of shutil.rmtree.  We can't
    # use globals because they may be None'ed out at shutdown.
    for name in self._listdir(path):
        fullname = self._path_join(path, name)
        try:
            isdir = self._isdir(fullname)

E usar o mesmo diretório para "isdir" retorna cerca de 100 correspondências; cerca de 50% destes usam 1 argumento, o resto 0. Eu não tenho certeza se isso é um problema com herança ou escopo ou o que, nem tenho ideia de qual é a importância do sublinhado precedente. Pesquisando "TypeError: _isdir ()" não retorna nenhuma correspondência.

Alguma idéia?

    
por B. Striegel 03.08.2011 / 21:57

1 resposta

2

Finalmente decidi dar a esta outra facada, e consegui fazê-la funcionar. A solução é uma alteração de duas linhas no arquivo ipython-0.11-py3.2.egg\IPython\utils\pickleshare.py , linha 52:

Antes:

if not self.root.isdir():
    self.root.makedirs()

Depois:

if not os.path.isdir(self.root):
    os.makedirs(self.root)
    
por 03.10.2011 / 20:49