Fehler beim Ausführen von IPython3 unter XP: TypeError: _isdir () benötigt genau 1 Argument (0 angegeben)

2

<UPDATE> Ich habe IPython3 nie unter Windows zum Laufen gebracht, aber ich habe es geschafft, es (nach viel Frust) auf meinem lokalen CentOS-Server zum Laufen zu bringen, indem ich schließlich das absolut Unentbehrliche entdeckt habe virtualenv Werkzeug. Ich bin mir nicht sicher, ob virtualenv auch unter Windows funktioniert, aber ich bin zufrieden damit, IPython über SSH zu verwenden. </UPDATE>

Ich bin neu in Python und habe mich für Python 3.2 entschieden. Ich finde es toll, dass die Sprache mit einem integrierten interaktiven Interpreter ausgestattet ist, aber ich suche etwas, das mehr Funktionen bietet, und IPython scheint die Anforderungen zu erfüllen. Ich habe Distribute installiert und den folgenden Befehl aus meinem Verzeichnis C: \ Python32 \ Scripts \ verwendet, um das Ei abzurufen:

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

Dies wurde erfolgreich abgeschlossen, obwohl die Ausgabe inzwischen meine Scrollback-Schwelle überschritten hat, sodass ich sie hier nicht produzieren kann. ich rannte ipython3 --help und produzierte den Hilfebildschirm, so dass ich weiß, dass zumindest ein Teil davon richtig installiert wurde. Wenn ich jedoch ausführen ipython3 Ich erhalte folgenden Fehler:

$ 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 --help Ich habe noch keine anderen Argumente gefunden, die diesen Fehler nicht erzeugen. Ich habe in C: \ Python32 \ lib \ site-packages \ ipython-0.11-py3.2.egg \ IPython \ nach "_isdir" gesucht und nur zwei Verweise darauf gefunden, und zwar in einer Datei mit dem Namen tempdir.py. Beide werden hier angezeigt:

# 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 nach "isdir" durchsuchen, werden ungefähr 100 Übereinstimmungen 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 Umfang ist oder was. Ich habe auch keine Ahnung, wie wichtig der vorangegangene Unterstrich ist. Durch Googeln von "TypeError: _isdir ()" werden keinerlei Übereinstimmungen zurückgegeben.

Irgendwelche Ideen?

B. Striegel
quelle

Antworten:

2

Schließlich entschied er sich für einen weiteren Stich und brachte ihn zum Laufen. Die Lösung ist ein zweizeiliger Wechsel in der ipython-0.11-py3.2.egg\IPython\utils\pickleshare.py Datei, Zeile 52:

Vor:

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

Nach dem:

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