python.net import clr 抛出无效指针错误
python.net import clr throws invalid pointer error
当我尝试在我的 python 代码中导入 clr 时,出现以下错误:
*** Error in `python': free(): invalid pointer: 0xb0f1a120 ***
Stacktrace:
at <unknown> <0xffffffff>
at (wrapper managed-to-native) Python.Runtime.Runtime.Py_Initialize () <0xffffffff>
at Python.Runtime.Runtime.Initialize () <0x00023>
at Python.Runtime.PythonEngine.Initialize () <0x00047>
at Python.Runtime.PythonEngine.InitExt () <0x0000b>
at (wrapper runtime-invoke) object.runtime_invoke_void (object,intptr,intptr,intptr) <0xffffffff>
Native stacktrace:
/usr/lib/libmonoboehm-2.0.so.1(+0xcb5f4) [0xb1b5e5f4]
[0xb7745d14]
[0xb7745d1e]
/lib/i386-linux-gnu/libc.so.6(gsignal+0x47) [0xb7592607]
/lib/i386-linux-gnu/libc.so.6(abort+0x143) [0xb7595a33]
/lib/i386-linux-gnu/libc.so.6(+0x68e53) [0xb75cce53]
/lib/i386-linux-gnu/libc.so.6(+0x7333a) [0xb75d733a]
/lib/i386-linux-gnu/libc.so.6(+0x73fad) [0xb75d7fad]
/usr/lib/i386-linux-gnu/libpython2.7.so(PyString_InternInPlace+0x97) [0xb0b3a157]
/usr/lib/i386-linux-gnu/libpython2.7.so(PyString_InternFromString+0x2f) [0xb0ad78ef]
/usr/lib/i386-linux-gnu/libpython2.7.so(PyType_Ready+0xb50) [0xb0b356e0]
/usr/lib/i386-linux-gnu/libpython2.7.so(_Py_ReadyTypes+0xcd) [0xb0b3d47d]
/usr/lib/i386-linux-gnu/libpython2.7.so(Py_InitializeEx+0x6d) [0xb0b5d5dd]
/usr/lib/i386-linux-gnu/libpython2.7.so(Py_Initialize+0x1b) [0xb0b5df7b]
[0xb481553c]
[0xb4814f2c]
[0xb480af98]
[0xb480ae84]
[0xb480af0d]
/usr/lib/libmonoboehm-2.0.so.1(+0x29723) [0xb1abc723]
Debug info from gdb:
Could not attach to process. If your uid matches the uid of the target
process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try
again as the root user. For more details, see /etc/sysctl.d/10-ptrace.conf
ptrace: Operation not permitted.
No threads.
=================================================================
Got a SIGABRT while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries
used by your application.
=================================================================
我找到了对类似问题的引用 (https://mail.python.org/pipermail/pythondotnet/2014-October/001598.html),但我不知道如何使用 npython 二进制文件,我不想重建 python 启用了共享库。
任何提示或帮助将不胜感激。
经过一些痛苦的尝试,我在我的代码中成功地使用了 import clr
。
首先,我需要以某种方式使用正确的二进制文件,为了实现这一点,我使用了来自 pythonnet/pythonnet 包的 git 的最新开发源。
您可以尝试:$ sudo pip install --pre pythonnet
下载并安装最新的开发源。但请记住,有一些额外条件,所以我附上了 travis 构建细节
system_info
Build language: python
Operating System: Ubuntu 12.04 LTS
$ python --version
Python 2.7.9
$ pip --version
pip 6.0.7 from /home/travis/virtualenv/python2.7.9/lib/python2.7/site-packages (python 2.7)
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository -y "deb http://archive.ubuntu.com/ubuntu/ trusty main universe"
$ sudo apt-get -qq install mono-devel mono-gmcs mono-xbuild nunit-console
$ sudo mozroots --import --machine --sync
$ yes | sudo certmgr -ssl -m https://go.microsoft.com
$ yes | sudo certmgr -ssl -m https://nugetgallery.blob.core.windows.net
$ yes | sudo certmgr -ssl -m https://nuget.org
$ pip install six
现在通常使用 pip 安装 pythonnet 应该会成功执行,您可以尝试在 python 代码中调用 import clr。就我个人而言,即使在这种情况下它也失败了,尽管它安装时没有错误。原因是虽然我的 python 编译时没有 --enable-shared,运行ning
$ python -c 'import sys; from distutils.sysconfig import get_config_var; print(get_config_var("Py_ENABLE_SHARED"))'
returned 1 虽然它应该 return 0.
所以我从 git https://github.com/pythonnet/pythonnet
下载了最新的开发源
将其放入正确的文件夹后,我编辑了 setup.py 设置变量
在执行
之后检查共享库是否为 0
$ sudo python setup.py install
脚本安装成功,没有错误,我可以在我的 python 脚本中使用 import clr。为确保 运行 一切正确,您可以 运行:
$ python src/tests/runtests.py
为了将来参考,在 Pythonnet issue #119
中解决了这个问题
添加...
defines.append("PYTHON_WITHOUT_ENABLE_SHARED")
...到setup.py
然后使用python setup.py install [options]
安装达到与相同的效果。
当我尝试在我的 python 代码中导入 clr 时,出现以下错误:
*** Error in `python': free(): invalid pointer: 0xb0f1a120 ***
Stacktrace:
at <unknown> <0xffffffff>
at (wrapper managed-to-native) Python.Runtime.Runtime.Py_Initialize () <0xffffffff>
at Python.Runtime.Runtime.Initialize () <0x00023>
at Python.Runtime.PythonEngine.Initialize () <0x00047>
at Python.Runtime.PythonEngine.InitExt () <0x0000b>
at (wrapper runtime-invoke) object.runtime_invoke_void (object,intptr,intptr,intptr) <0xffffffff>
Native stacktrace:
/usr/lib/libmonoboehm-2.0.so.1(+0xcb5f4) [0xb1b5e5f4]
[0xb7745d14]
[0xb7745d1e]
/lib/i386-linux-gnu/libc.so.6(gsignal+0x47) [0xb7592607]
/lib/i386-linux-gnu/libc.so.6(abort+0x143) [0xb7595a33]
/lib/i386-linux-gnu/libc.so.6(+0x68e53) [0xb75cce53]
/lib/i386-linux-gnu/libc.so.6(+0x7333a) [0xb75d733a]
/lib/i386-linux-gnu/libc.so.6(+0x73fad) [0xb75d7fad]
/usr/lib/i386-linux-gnu/libpython2.7.so(PyString_InternInPlace+0x97) [0xb0b3a157]
/usr/lib/i386-linux-gnu/libpython2.7.so(PyString_InternFromString+0x2f) [0xb0ad78ef]
/usr/lib/i386-linux-gnu/libpython2.7.so(PyType_Ready+0xb50) [0xb0b356e0]
/usr/lib/i386-linux-gnu/libpython2.7.so(_Py_ReadyTypes+0xcd) [0xb0b3d47d]
/usr/lib/i386-linux-gnu/libpython2.7.so(Py_InitializeEx+0x6d) [0xb0b5d5dd]
/usr/lib/i386-linux-gnu/libpython2.7.so(Py_Initialize+0x1b) [0xb0b5df7b]
[0xb481553c]
[0xb4814f2c]
[0xb480af98]
[0xb480ae84]
[0xb480af0d]
/usr/lib/libmonoboehm-2.0.so.1(+0x29723) [0xb1abc723]
Debug info from gdb:
Could not attach to process. If your uid matches the uid of the target
process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try
again as the root user. For more details, see /etc/sysctl.d/10-ptrace.conf
ptrace: Operation not permitted.
No threads.
=================================================================
Got a SIGABRT while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries
used by your application.
=================================================================
我找到了对类似问题的引用 (https://mail.python.org/pipermail/pythondotnet/2014-October/001598.html),但我不知道如何使用 npython 二进制文件,我不想重建 python 启用了共享库。
任何提示或帮助将不胜感激。
经过一些痛苦的尝试,我在我的代码中成功地使用了 import clr
。
首先,我需要以某种方式使用正确的二进制文件,为了实现这一点,我使用了来自 pythonnet/pythonnet 包的 git 的最新开发源。
您可以尝试:$ sudo pip install --pre pythonnet
下载并安装最新的开发源。但请记住,有一些额外条件,所以我附上了 travis 构建细节
system_info
Build language: python
Operating System: Ubuntu 12.04 LTS
$ python --version
Python 2.7.9
$ pip --version
pip 6.0.7 from /home/travis/virtualenv/python2.7.9/lib/python2.7/site-packages (python 2.7)
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository -y "deb http://archive.ubuntu.com/ubuntu/ trusty main universe"
$ sudo apt-get -qq install mono-devel mono-gmcs mono-xbuild nunit-console
$ sudo mozroots --import --machine --sync
$ yes | sudo certmgr -ssl -m https://go.microsoft.com
$ yes | sudo certmgr -ssl -m https://nugetgallery.blob.core.windows.net
$ yes | sudo certmgr -ssl -m https://nuget.org
$ pip install six
现在通常使用 pip 安装 pythonnet 应该会成功执行,您可以尝试在 python 代码中调用 import clr。就我个人而言,即使在这种情况下它也失败了,尽管它安装时没有错误。原因是虽然我的 python 编译时没有 --enable-shared,运行ning
$ python -c 'import sys; from distutils.sysconfig import get_config_var; print(get_config_var("Py_ENABLE_SHARED"))'
returned 1 虽然它应该 return 0.
所以我从 git https://github.com/pythonnet/pythonnet
下载了最新的开发源将其放入正确的文件夹后,我编辑了 setup.py 设置变量 在执行
之后检查共享库是否为 0$ sudo python setup.py install
脚本安装成功,没有错误,我可以在我的 python 脚本中使用 import clr。为确保 运行 一切正确,您可以 运行:
$ python src/tests/runtests.py
为了将来参考,在 Pythonnet issue #119
中解决了这个问题添加...
defines.append("PYTHON_WITHOUT_ENABLE_SHARED")
...到setup.py
然后使用python setup.py install [options]
安装达到与