我正在尝试在 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
,该包依赖于bar
和baz
,但实际上并不需要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 base
和rpm base
发行版。
答案4
我可以提供两种解决方案,一种是从头构建 Python:3.6 映像。此时 python3.x 成为事实上的选择。
此外,对我有用的另一个选项(在 Mac OSX 中)是:
brew install boost-python --with-python3 --without-python