Ошибка при запуске IPython3 в XP: ошибка типа: _isdir () принимает ровно 1 аргумент (задано 0)

2052
B. Striegel

<UPDATE>Никогда не получал IPython3 для работы под Windows, но мне удалось заставить его работать на моем локальном сервере CentOS (после большого разочарования), в конечном итоге обнаружив абсолютно необходимый инструмент virtualenv . Не уверен, что virtualenv сработает и на Windows, но сейчас я доволен использованием IPython через SSH.</UPDATE>

Я новичок в Python и решил погрузиться в Python 3.2. Мне нравится, что язык поставляется со встроенным интерактивным переводчиком, но я ищу что-то более полнофункциональное, и IPython выглядит так, как будто он отвечает всем требованиям. Я установил Distribute и использовал следующую команду из своего каталога C: \ Python32 \ Scripts \, чтобы получить яйцо:

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

Это завершилось успешно, хотя с тех пор выходные данные вышли за пределы моего порога прокрутки, поэтому я не могу произвести их здесь. Я запустил ipython3 --helpи создал экран справки, поэтому я знаю, что, по крайней мере, его часть установлена ​​правильно. Однако, когда я выполняю, ipython3я получаю следующую ошибку:

$ 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) 

Кроме --helpя еще не нашел никаких других аргументов, которые не вызывают эту ошибку. Я нашел «_isdir» в C: \ Python32 \ lib \ site-packages \ ipython-0.11-py3.2.egg \ IPython \ и нашел только две ссылки на него в файле с именем tempdir.py, оба показанные здесь:

# 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) 

И поиск того же каталога для «isdir» возвращает около 100 совпадений; около 50% из них используют 1 аргумент, остальные 0. Я не уверен, является ли это проблемой с наследованием или областью действия или чем, и при этом я не имею ни малейшего представления, какова важность предшествующего подчеркивания. Поиск в Google "TypeError: _isdir ()" не возвращает совпадений.

Есть идеи?

2

1 ответ на вопрос

2
B. Striegel

В конце концов решил сделать еще один удар, и сумел заставить его работать. Решением является двухстрочное изменение в ipython-0.11-py3.2.egg\IPython\utils\pickleshare.pyфайле, строка 52:

До:

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

После:

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