“导入网站'失败;使用-v进行追踪” - mac os lion,python 2.7,subprocess

时间:2011-12-26 11:34:47

标签: python macos subprocess bazaar

我正在尝试在python中运行一个子进程,这是我代码的一部分:

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

但它无法运行,这是我得到的例外:

 '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

我用谷歌搜索并阅读了很多关于“TypeError:无法创建对'classobj'对象的弱引用”: https://stackoverflow.com/questions/7753181/making-my-python-script-executable-causes-a-import-site-failed-use-v-for-tra

在这里:https://github.com/pypa/virtualenv/issues/108

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

引发的错误来自bzr,而不是你的脚本。尝试运行python并输入import site如果失败,你的python安装可能会出现问题。

另外,作为一般规则,除非你有理由在Popen中设置shell = True,否则最好设置shell = False。

答案 1 :(得分:0)

看起来问题出在/usr/local/bin/bzr而不在您的脚本中。尝试从命令行运行bzrMergeCommand,即不使用脚本。你应该得到同样的错误。

尝试按照链接的StackOverflow问题中的建议编辑/usr/local/bin/bzr中的shebang。

答案 2 :(得分:0)

正如其他人所说,问题在于Bazaar本身(/ usr / local / bin / bzr),而不是你的脚本。

根据Bazaar website,您需要调整Bazaar以在OS X Lion上使用Python 2.6:

  

注意:要在OS X Lion(10.7)中使用Bazaar,您应该更改版本   'bzr'脚本用于2.6的Python。你可以用一个   终端中的命令:

     

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