&引用;导入站点';失败;使用-v进行回溯";-mac os lion,python 2.7,子流程

&引用;导入站点';失败;使用-v进行回溯";-mac os lion,python 2.7,子流程,python,macos,subprocess,bazaar,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

我正在尝试用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
“导入站点”失败;使用-v进行回溯回溯(最近的调用
最后):文件“/usr/local/bin/bzr”,第21行,在
导入操作系统文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.py”,
第398行,输入
导入UserDict文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/UserDict.py”,
第84行,在
_abcoll.MutableMapping.register(iterablueserdict)文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/abc.py”,
第109行,在寄存器中
如果issubclass(子类,cls):文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/abc.py”,
第151行,在子项检查中__
如果cls._abc_cache:File”/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_weakrefset.py中的子类“,
第69行,in_uu包含__
self.data TypeError中的返回引用(项):无法创建对“classobj”对象的弱引用
我在谷歌上搜索并阅读了很多关于“TypeError:无法创建对'classobj'对象的弱引用”的内容:

在这里:


有什么想法吗?

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


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

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


另外,一般来说,除非您有理由在Popen中设置shell=True,否则最好将shell=False。

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

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

注意:要在OSXLion(10.7)中使用Bazaar,您应该更改版本 将“bzr”脚本使用的Python的。你可以用一个 终端中的命令:

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


脚本是否从cli工作?是!不知道,我以前没试过。如果可以,我会打50分。非常感谢你!shell=False给出:raise child\u exception OSError:[Errno 2]也没有这样的文件或目录,我从命令行运行它,结果正常。@ron:这是因为如果shell=True,它将启动默认的shell作为子进程,并将字符串bzrMergeCommand作为参数传递给它。如果设置shell=False,那么它将查找一个名为bzrMergeCommand值的文件(而不是程序,它是bzrMergeCommand中的第一个字)。尝试shell=False并将bzrMergeCommand拆分为一个列表,类似于:os.chdir(self.\u directoryName);bbzrMergeCommand=[“/usr/local/bin/bzr”,“merge”]然后子流程将在dirName中生成,并将使用参数merge启动bzr。(这将把您留在新目录中。)我在windows上看到这个错误,当时它正试图从不同版本导入库。您安装了哪些版本的python?默认值是什么?若它启动2.6来运行bzr,并试图从2.7导入站点,它将失败。此外,bzr在导入操作系统时失败,因此在python shell中,尝试导入操作系统并确保其正常工作。它起作用了。那么问题出在eclipse中?谢谢。这是我在你的建议后得到的错误:/bin/sh:/usr/local/bin/bzr:/usr/bin/python2.62.6:错误的解释器:没有这样的文件或目录看起来你可能已经a)运行了这个命令,或者b)在这个会话中运行了两次?(或者c)安装Bazaar的源代码已经硬连接到使用python2.6。)在任何情况下,您最终将/usr/bin/python2.6中的/usr/bin/python2.6替换为/usr/bin/python2.6,从而生成了明显不存在的/usr/bin/python/2.62.6。要修复它,请尝试:
sudosed-i's、/usr/bin/python2.62.6、/usr/bin/python2.6、/usr/local/bin/bzr