Fehler beim Ausführen von IPython3 unter XP: TypeError: _isdir () nimmt genau 1 Argument (0).

2133
B. Striegel

<UPDATE>Ich habe IPython3 nie unter Windows zum Laufen gebracht, aber es gelang mir, es auf meinem lokalen CentOS-Server (nach viel Frustration) zum Laufen zu bringen, indem ich das absolut unverzichtbare Virtualenv- Tool entdeckte. Nicht sicher, ob Virtualenv auch unter Windows seine Magie entfalten würde, aber ich bin jetzt damit zufrieden, IPython über SSH zu nutzen.</UPDATE>

Ich bin neu in Python und habe mich entschieden mit Python 3.2 zu tauchen. Ich finde es toll, dass die Sprache mit einem integrierten interaktiven Dolmetscher ausgestattet ist, aber ich suche nach etwas mehr Funktionen und IPython sieht so aus, als ob es zur Rechnung passt. Ich habe Distribute installiert und den folgenden Befehl aus meinem Verzeichnis C: \ Python32 \ Scripts \ verwendet, um das Ei zu erhalten:

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

Dies wurde erfolgreich abgeschlossen, obwohl die Ausgabe inzwischen über meinen Scrollback-Schwellenwert hinausgegangen ist, sodass ich sie hier nicht produzieren kann. Ich habe den Hilfebildschirm ausgeführt ipython3 --helpund produziert, daher weiß ich, dass zumindest ein Teil davon korrekt installiert wurde. Beim Ausführen ipython3erhalte ich jedoch folgende Fehlermeldung:

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

Außer --helpich habe noch keine anderen Argumente gefunden, die diesen Fehler nicht erzeugen. Ich habe nach "_isdir" in C: \ Python32 \ lib \ site-packages \ ipython-0.11-py3.2.egg \ IPython \ gesucht und nur zwei Verweise darauf gefunden, in einer Datei namens tempdir.py, die beide hier gezeigt werden:

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

Wenn Sie dasselbe Verzeichnis für "isdir" aufrufen, werden ungefähr 100 Treffer zurückgegeben. etwa 50% davon verwenden 1 Argument, der Rest 0. Ich bin mir nicht sicher, ob dies ein Problem mit der Vererbung oder dem Gültigkeitsbereich oder was ist, noch habe ich eine Ahnung, was die Bedeutung des vorhergehenden Unterstrichs ist. Googling "TypeError: _isdir ()" gibt keinerlei Übereinstimmungen zurück.

Irgendwelche Ideen?

2

1 Antwort auf die Frage

2
B. Striegel

Schließlich entschied ich mich, dies noch einmal zu tun, und es gelang ihm, es zu arbeiten. Die Lösung ist eine zweizeilige Änderung in der ipython-0.11-py3.2.egg\IPython\utils\pickleshare.pyDatei, Zeile 52:

Vor:

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

Nach dem:

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