为 python3 安装 libboost-python-dev 而不安装 python2.7

为 python3 安装 libboost-python-dev 而不安装 python2.7

我正在尝试在 Ubuntu Xenial 上安装 python3 的 boost 绑定,但它会引入整个 python2.7 依赖关系树。我不想或不需要我的系统(Docker 映像)上的 python2.7。有没有办法只安装 python3 绑定?

答案1

我已决定自己编译和安装 boost(我也自己安装/编译了 Python 3.6。)。我的 Dockerfile 中现在有:

# We have to compile it ourselves against the custom Python and cannot use Debian package.
# Includes a symlink workaround for: https://svn.boost.org/trac10/ticket/11120
RUN cd /usr/src && \
 wget --no-verbose https://dl.bintray.com/boostorg/release/1.65.1/source/boost_1_65_1.tar.gz && \
 tar xzf boost_1_65_1.tar.gz && \
 cd boost_1_65_1 && \
 ln -s /usr/local/include/python3.6m /usr/local/include/python3.6 && \
 ./bootstrap.sh --with-python=$(which python3) && \
 ./b2 install && \
 rm /usr/local/include/python3.6 && \
 ldconfig && \
 cd / && rm -rf /usr/src/*

答案2

您有三个选择:

1. 自己构建 Boost.Python

这是我推荐的选项:它很干净,不会弄乱你的系统,而且你可以完全控制你得到的东西。此外1

Boost.Python 是一个单独编译的(而不是仅有头文件的)库

所以你可以直接构建它。下载档案并按照入门指南。 (这是什么OP 做到了


2. 使用dpkg以避免安装不需要的依赖项

如果您不想自己构建 Boost.Python,您可以使用 绕过apt(及其依赖项检查)dpkg

假设您想要安装一个名为 的包foo,该包依赖于barbaz,但实际上并不需要baz

apt download foo bar
sudo dpkg --ignore-depends=baz --install foo.deb bar.deb

请注意,它apt仍然会抱怨未解决的依赖关系(但嘿,这是它的工作),所以问题并没有完全解决:你只是把它扫到了地毯下。

这个选项比前一个选项更快,但我不推荐它。


3. 用来equivs愚弄apt

这对我来说是新的。显然,你可以创建虚拟包来满足依赖关系这样,您就不必安装不需要的/不必要的软件包,也apt不会对此抱怨。

正如我所说,我equivs以前从未使用过,但你可以了解更多信息这里

答案3

根据我的研究,这是不可能的

libboost-python-dev包有libboost-python1.67-dev依赖关系。

https://packages.debian.org/sid/libboost-python-dev

并且libboost-python1.67-dev具有python-dev使用 Python 2 的依赖项

https://packages.debian.org/sid/libboost-python1.67-dev

所以你不能这样做,我认为你不能在 Debian 中这样做。

我建议检查arch baserpm base发行版。

答案4

我可以提供两种解决方案,一种是从头构建 Python:3.6 映像。此时 python3.x 成为事实上的选择。

此外,对我有用的另一个选项(在 Mac OSX 中)是:

brew install boost-python --with-python3 --without-python

相关内容