2 Stimmen

"import site' failed; use -v for traceback" - mac os lion, python 2.7, subprocess

Ich versuche, einen Subprozess in Python auszuführen, hier ein Teil meines Codes:

def update(self):
        currentTime = strftime("%d.%m.%y %H:%M", gmtime()) #strftime("%d-%m-%y %H:%M", gmtime)
        resultString = "======== " + currentTime + " ========\n\n"  
        bzrMergeCommand = "cd %s ; /usr/local/bin/bzr merge" % self._directoryName
        print "Getting the updated code from bzr..."
        mergeResult = sp.Popen(bzrMergeCommand, shell=True, stdout=sp.PIPE, stderr=sp.PIPE, cwd= self._directoryName)

        communicated = mergeResult.communicate()

Aber er läuft nicht, und das ist die Ausnahme, die ich bekommen habe:

 'import site' failed; use -v for traceback Traceback (most recent call
 last):   File "/usr/local/bin/bzr", line 21, in <module>
     import os   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.py",
 line 398, in <module>
     import UserDict   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/UserDict.py",
 line 84, in <module>
     _abcoll.MutableMapping.register(IterableUserDict)   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/abc.py",
 line 109, in register
     if issubclass(subclass, cls):   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/abc.py",
 line 151, in __subclasscheck__
     if subclass in cls._abc_cache:   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_weakrefset.py",
 line 69, in __contains__
     return ref(item) in self.data TypeError: cannot create weak reference to 'classobj' object

Ich habe gegoogelt und viel über "TypeError: cannot create weak reference to 'classobj' object" gelesen: https://stackoverflow.com/questions/7753181/making-my-python-script-executable-causes-a-import-site-failed-use-v-for-tra

und hier: https://github.com/pypa/virtualenv/issues/108

Irgendeine Idee?

1voto

Perkins Punkte 2209

Die Fehlermeldung kommt von bzr, nicht von Ihrem Skript. Versuchen Sie, python zu starten und import site einzugeben. Wenn das fehlschlägt, ist möglicherweise etwas mit Ihrer Python-Installation nicht in Ordnung.

Außerdem ist es in der Regel besser, shell=False zu setzen, es sei denn, Sie haben einen Grund, shell=True in Popen zu setzen.

0voto

Rob Wouters Punkte 14969

Es sieht so aus, als läge das Problem in /usr/local/bin/bzr und nicht in Ihrem Skript. Versuchen Sie, Ihr bzrMergeCommand von der Befehlszeile aus, d. h. ohne Verwendung eines Skripts. Sie sollten den gleichen Fehler erhalten.

Versuchen Sie, den ganzen Kram in /usr/local/bin/bzr wie in der von Ihnen verlinkten StackOverflow-Frage vorgeschlagen.

0voto

Simon Whitaker Punkte 20381

Wie andere bereits festgestellt haben, liegt das Problem bei Bazaar selbst (/usr/local/bin/bzr), nicht bei Ihrem Skript.

Nach Angaben der Basar-Website müssen Sie Bazaar für die Verwendung von Python 2.6 unter OS X Lion anpassen:

Hinweis: Um Bazaar unter OS X Lion (10.7) zu verwenden, sollten Sie die Version von Python, die das Skript 'bzr' verwendet, auf 2.6 ändern. Sie können dies mit einem Befehl in einem Terminal tun:

sudo sed -i '' s,/usr/bin/python,/usr/bin/python2.6, /usr/local/bin/bzr

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X