gpt4 book ai didi

python - 为什么在虚拟环境中调试 Python C 扩展时 Xcode 5 会崩溃?

转载 作者:太空宇宙 更新时间:2023-11-03 23:49:20 25 4
gpt4 key购买 nike

我有一个 Python C 扩展,我正在 Mavericks 上的 Xcode 5.1.1 中调试,这会导致 Xcode 在测试按所述运行后立即崩溃 here .

然后系统提示我重新安装 Xcode,因为它显然已损坏。

崩溃日志包含:

Crashed Thread:  14  Dispatch queue: DBGLLDBLauncher Serial Queue

Exception Type: EXC_BAD_ACCESS (Code Signature Invalid)
Exception Codes: 0x0000000000000032, 0x00000001128b9000

kernel messages:
-1 sec CODE SIGNING: cs_invalid_page(0x1128b9000): p=6382[Xcode] final status 0x1000200, denying page sending SIGKILL
-1 sec CODE SIGNING: process 6382[Xcode]: rejecting invalid page at address 0x1128b9000 from offset 0x1000 in file "/Users/dwhitla/.virtualenvs/lrparser/bin/python" (cs_mtime:1404897136.0 == mtime:1404897136.0) (signed:1 validated:1 tainted:1 wpmapped:0 slid:0)
-2 sec CODE SIGNING: cs_invalid_page(0x101443000): p=6766[python] final status 0x0, allowing (remove VALID) page
-6 sec CODE SIGNING: cs_invalid_page(0x1000): p=6760[GoogleSoftwareUp] final status 0x0, allowing (remove VALID) page
-15 sec CODE SIGNING: cs_invalid_page(0x10af5c000): p=6757[python] final status 0x0, allowing (remove VALID) page

最佳答案

问题是 mkvirtualenv 将您的系统 python 可执行文件(在本例中为/usr/bin/python)复制到虚拟环境中。然后它不做的是对可执行文件进行代码签名。在 10.9(可能更早)的 Xcode 中,这会导致代码签名验证步骤失败,该步骤期望签名日期和最后修改日期相同。

这会导致 Xcode 崩溃,以及由此产生的弹出窗口中的糟糕建议是 Apple 可能应该解决的其他问题。

您的选择是使用您自己的有效代码签名身份(假设您有一个)对复制的 $VIRTUAL_ENV/.Python dylib 和 $VIRTUAL_ENV/bin/python 包装器进行代码签名,或者您可以修补/Library/Python//site-packages 使用我附加的针对 virtualenv-1.11.6 的补丁。这个补丁对我有用,但我建议在你自己使用之前备份你当前的 virtualenv.py:

--- virtualenv.py.orig  2014-08-11 11:55:55.000000000 +1000
+++ virtualenv.py.new 2014-08-12 14:24:29.000000000 +1000
@@ -1348,38 +1348,21 @@
if 'EPD' in prefix:
logger.debug('EPD framework detected')
original_python = os.path.join(prefix, 'bin/python')
- shutil.copy(original_python, py_executable)
+ shutil.copy2(original_python, py_executable)

# Copy the framework's dylib into the virtual
# environment
- virtual_lib = os.path.join(home_dir, '.Python')
+ virtual_lib = os.path.join(home_dir, 'Python')

if os.path.exists(virtual_lib):
os.unlink(virtual_lib)
copyfile(
os.path.join(prefix, 'Python'),
virtual_lib,
- symlink)
-
- # And then change the install_name of the copied python executable
- try:
- mach_o_change(py_executable,
- os.path.join(prefix, 'Python'),
- '@executable_path/../.Python')
- except:
- e = sys.exc_info()[1]
- logger.warn("Could not call mach_o_change: %s. "
- "Trying to call install_name_tool instead." % e)
- try:
- call_subprocess(
- ["install_name_tool", "-change",
- os.path.join(prefix, 'Python'),
- '@executable_path/../.Python',
- py_executable])
- except:
- logger.fatal("Could not call install_name_tool -- you must "
- "have Apple's development tools installed")
- raise
+ False)
+ os.symlink(os.path.dirname(prefix), os.path.join(home_dir, 'Versions'))
+ os.symlink(os.path.join('Versions', 'Current', 'Resources'),
+ os.path.join(home_dir, 'Resources'))

if not is_win:
# Ensure that 'python', 'pythonX' and 'pythonX.Y' all exist

关于python - 为什么在虚拟环境中调试 Python C 扩展时 Xcode 5 会崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24666971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com