kdh*_*pak 15 c++ python macos python-3.x anaconda
我已经看过几个帖子说明了同样的错误,但在这些帖子中查找并尝试答案并没有帮助.我想知道是否有人可以看看这个并看看是否有东西弹出来了?
我正在为CPP应用程序构建Python扩展,并且在编译和构建步骤期间没有错误.但是,当我导入模块时,我得到标题中提到的错误.其他stackoverflow答案声称这是因为在编译和使用不同的解释器时与一个库链接.据我所知,我使用相同的Python解释器.我现在要描述为什么我认为我在链接过程和解释器中使用相同的Python.
这是我用来构建Python扩展的命令
$ gcc -shared helicsPYTHON_wrap.c $(python-config3 --includes) -I/path/to/helics-0.9/includes -L/path/to/helics-0.9/lib -lhelicsSharedLib -L$(python3-config --prefix)/lib -lpython3.6m -o _helics.so
$ which python3-config
/Users/$USER/miniconda3/bin/python3-config
$ python3-config --prefix
/Users/$USER/miniconda3
Run Code Online (Sandbox Code Playgroud)
如果我尝试导入导入共享库的python文件,则会抛出致命错误.如果我otool -L在共享库上使用,我会得到以下内容.这是我期望得到的.
$ otool -L _helics.so
_helics.so:
@rpath/libhelicsSharedLib.dylib (compatibility version 0.0.0, current version 0.0.0)
@rpath/libpython3.6m.dylib (compatibility version 3.6.0, current version 3.6.0)
/usr/local/opt/zeromq/lib/libzmq.5.dylib (compatibility version 7.0.0, current version 7.3.0)
libboost_program_options.dylib (compatibility version 0.0.0, current version 0.0.0)
libboost_filesystem.dylib (compatibility version 0.0.0, current version 0.0.0)
libboost_system.dylib (compatibility version 0.0.0, current version 0.0.0)
libboost_date_time.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/local/opt/gcc/lib/gcc/7/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.24.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.60.2)
/usr/local/lib/gcc/7/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
Run Code Online (Sandbox Code Playgroud)
我还尝试install_name_tool添加libpython3.6m.dylib的完整路径.
$ install_name_tool -change @rpath/libpython3.6m.dylib /Users/$USER/miniconda3/envs/py3/lib/libpython3.6m.dylib _helics.so
Run Code Online (Sandbox Code Playgroud)
我仍然得到同样的致命错误.我的假设是我的Mac System Python 2.7安装在某个阶段对这个过程有影响.我无法确定哪里.
有没有办法添加更多的调试语句,以找出存在致命Python错误的原因.目前,错误消息非常短.
$ python helics.py
Fatal Python error: PyThreadState_Get: no current thread
[1] 64481 abort python helics.py
Run Code Online (Sandbox Code Playgroud)
奇怪的是,如果我使用conda环境并使用Python 2.7,我可以加载扩展程序!这就是为什么我认为当我使用Python 3.6时,它以某种方式从默认的mac系统python 2.7安装中获取并正常工作.当我使用conda 2.7 python环境时它正在选择相同的东西,但因为它们都是Python 2.7(虽然conda是2.7.14而系统python是2.7.10)它似乎工作.这是otool -L我使用conda环境时的输出.
$ otool -L _helics.so
_helics.so:
@rpath/libhelicsSharedLib.dylib (compatibility version 0.0.0, current version 0.0.0)
@rpath/libpython2.7.dylib (compatibility version 2.7.0, current version 2.7.0)
/usr/local/opt/zeromq/lib/libzmq.5.dylib (compatibility version 7.0.0, current version 7.3.0)
libboost_program_options.dylib (compatibility version 0.0.0, current version 0.0.0)
libboost_filesystem.dylib (compatibility version 0.0.0, current version 0.0.0)
libboost_system.dylib (compatibility version 0.0.0, current version 0.0.0)
libboost_date_time.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/local/opt/gcc/lib/gcc/7/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.24.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.60.2)
/usr/local/lib/gcc/7/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
Run Code Online (Sandbox Code Playgroud)
我的问题是1)如何从Python的错误中获取更多的调试信息.我试过了python -vvv,但没有给我足够的信息.我尝试使用gdb,但也没有给我任何信息.我相信它需要使用调试符号重新编译Python本身.2)您对如何解决此问题或进一步调试有任何建议吗?
此外,我不确定这是否是有用的信息,但我能够使用ctypes并在创建后加载共享库.我只是无法将其导入为python模块.
如果有兴趣,这是最初的问题 - https://github.com/GMLC-TDC/HELICS-src/issues/59
编辑:我尝试使用zsh和bash,仍然得到相同的错误.我也尝试export PATH="/Users/$USER/miniconda3/bin:/Users/$USER/miniconda3/lib"在shell中暂时设置以下内容并运行,我仍然得到同样的错误.这应该排除我的Mac系统Python 2.7.10,所以我真的不确定发生了什么.
再次编辑:我也尝试用Python2重新安装miniconda.如果我使用Python2一切正常.我只是无法使用miniconda使用Python3.奇怪的是,如果我使用自制软件并安装Python3似乎工作正常.
再次编辑:这可能是High Sierra的一个问题.我目前无法访问另一台Mac,但我使用的是最新的SIP操作系统.我不确定这是否导致了这个问题.另外,我尝试过使用Anaconda3而且没有运气.
再次编辑:这似乎与操作系统无关.我能够在另一台装有High Sierra的计算机上成功运行.
再次编辑:我在其他新的操作系统安装上测试了它,但它们不起作用.但他们确实在我的两台机器上工作.是否有其他工具可以告诉您库需要什么依赖项或哪些Python会引发致命错误?我现在最好的猜测是,我过去在其他机器上安装了一些东西,可以让它工作.我需要确定那是什么,并确保我可以记录它.
再次编辑:我添加了我正在使用的Python版本输出的要点.
再次编辑:我已经为miniconda和anaconda添加了标签,因为我在使用自制软件python3时没有遇到这个问题,但只是当我在python3环境中使用miniconda3或anaconda2时.这似乎总是适用于Python2,无论它是自制程序,anaconda还是miniconda.
再次编辑:
如果其他人想要在他们的机器上复制,这些步骤.
git clone https://github.com/GMLC-TDC/HELICS-src
mkdir build-osx
brew install boost
brew install cmake
brew install swig
cmake -DBUILD_PYTHON=ON -DPYTHON_LIBRARY=$(python3-config --prefix)/lib/libpython3.6m.dylib -DPYTHON_INCLUDE_DIR=$(python3-config --prefix)/include/python3.6m/ ..
make
cd ./swig/python/
python helics.py # Error
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1498 次 |
| 最近记录: |