«Не удалось импортировать сайт; используйте -v для трассировки» - Mac OS Lion, Python 2.7, подпроцесс - PullRequest
2 голосов
/ 26 декабря 2011

Я пытаюсь запустить подпроцесс в 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 ]

1 голос
/ 03 января 2012

Возникла ошибка от bzr, а не от вашего скрипта. Попробуйте запустить python и набрать сайт импорта. Если это не удастся, у вас может быть что-то не так с вашей установкой python.

Кроме того, как правило, если у вас нет причины для установки shell = True в Popen, лучше установить shell = False.

0 голосов
/ 06 января 2012

Как уже отмечали другие, проблема в самом Bazaar (/ usr / local / bin / bzr), а не в вашем скрипте.

Согласно веб-сайту Bazaar , вам нужно настроить Bazaar для использования Python 2.6 на OS X Lion:

Примечание: чтобы использовать Bazaar в OS X Lion (10.7), вы должны изменить версию Python, используемый скриптом 'bzr' для 2.6. Вы можете сделать это с одним команда в терминале:

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

0 голосов
/ 02 января 2012

Похоже, проблема в /usr/local/bin/bzr, а не в вашем скрипте. Попробуйте запустить bzrMergeCommand из командной строки, т.е. без использования скрипта. Вы должны получить ту же ошибку.

Попробуйте отредактировать shebang в /usr/local/bin/bzr, как предложено в вашем связанном вопросе StackOverflow.

...