使用CMake for Python 3构建SimpleITK

Gar*_*ett 3 cmake python-3.x itk

我想从源代码构建SimpleITK并为Python 3.4安装它(在Ubuntu 14.04上).

我按照SimpleITK的构建说明进行操作,即

git clone http://itk.org/SimpleITK.git
mkdir SimpleITK-build
cd SimpleITK-build
cmake ../SimpleITK/SuperBuild
Run Code Online (Sandbox Code Playgroud)

这工作得很好.我能够使用Python 2.7安装SimpleITK sudo python setup.py install.然后我尝试使用Python安装它sudo python3.4 setup.py install,虽然它似乎安装正确,但当我尝试在Python 3中导入SimpleITK时,我得到了:

...    
    File "/usr/lib/python3.4/imp.py", line 243, in load_module
        return load_dynamic(name, filename, file)
ImportError: dynamic module does not define init function (PyInit__SimpleITK)
Run Code Online (Sandbox Code Playgroud)

在上面的构建说明中,它说:

验证和/或更正高级cmake变量到特定语言的可执行文件,库和包含目录.例如,如果您有多个Python安装,请确保所有相关的Python变量引用相同的版本.

我没有这样做,我怀疑这就是为什么它只适用于Python 2.7.如何更正"高级cmake变量"?

Gar*_*ett 6

以下是我在Linux上使用的所有步骤(建立Yiuin的答案和官方文档).

获取SimpleITK源代码

cd ~
git clone --recursive http://itk.org/SimpleITK.git
Run Code Online (Sandbox Code Playgroud)

设置最新的稳定版本

cd ~/SimpleITK
git tag
Run Code Online (Sandbox Code Playgroud)

寻找最新的稳定版本(对我而言,它是"v0.8.0"),并通过做检查

git checkout v0.8.0
Run Code Online (Sandbox Code Playgroud)

并且不要担心关于'超级HEAD'的警告.

构建SimpleITK

cd ~
mkdir SimpleITK-build
cd SimpleITK-build
Run Code Online (Sandbox Code Playgroud)

在这里我使用了CMake GUI(在Ubuntu上,得到它sudo apt-get install cmake-qt-gui),

cmake-gui ../SimpleITK/SuperBuild/
Run Code Online (Sandbox Code Playgroud)

这将打开一个GUI,您可以在其中编辑cmake变量.单击按钮Configure并点击Finish弹出的对话框,然后启用Advanced.更改所有相关的Python变量:

在此输入图像描述

(我不确定为什么有些路径最后有'm',但你可以在这里阅读更多相关信息)

如果要关闭Java或任何其他语言,请向下滚动并禁用WRAP_JAVA.Configure再次点击(不确定是否有必要)然后点击Generate.关闭CMake GUI,返回终端并输入

make
Run Code Online (Sandbox Code Playgroud)

这需要至少一个小时.

现在将此行添加到.bashrc文件中

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/SimpleITK-build/lib
Run Code Online (Sandbox Code Playgroud)

在Python上安装

我曾经checkinstall干净地管理安装,

cd ~
sudo checkinstall --pkgname python3-simpleitk  python3.4 \
~/SimpleITK-build/SimpleITK-build/Wrapping/PythonPackage/setup.py install
Run Code Online (Sandbox Code Playgroud)