OpenSFM setup.py 文件在通过 Docker 构建后返回错误
OpenSFM setup.py file returning error after building via Docker
我在构建 OpenSFM 时遇到问题。 运行 setup.py 文件中出现错误。
首先,我在 VirtualBox 上 运行 Ubuntu 16.04。我安装了 Docker 和 运行
docker pull freakthemighty/opensfm
此镜像构建成功。
此外,我将 OpenSFM 存储库从 here 克隆到我的主文件夹中。
下一步,我应该通过 运行 在主文件夹中构建:
python setup.py build
这是产生的错误
walter@VirtualUbuntu:~$ python setup.py build
Configuring...
Traceback (most recent call last):
File "setup.py", line 21, in <module>
subprocess.Popen(['cmake','../opensfm/src'], cwd='cmake_build').wait()
File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1343, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
Here 是有问题的 setup.py 文件。
我最终自己构建了 Dockerfile。我添加了最后几个步骤来让它工作并自动构建 OpenSfM。
我先克隆存储库,然后添加几个缺少的包,然后自动构建 setup.py 文件。
FROM ubuntu:16.04
# Install apt-getable dependencies
RUN apt-get update \
&& apt-get install -y \
build-essential \
cmake \
git \
libatlas-base-dev \
libboost-python-dev \
libeigen3-dev \
libgoogle-glog-dev \
libopencv-dev \
libsuitesparse-dev \
python-dev \
python-numpy \
python-opencv \
python-pip \
python-pyexiv2 \
python-pyproj \
python-scipy \
python-yaml \
wget \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Install Ceres from source
RUN \
mkdir -p /source && cd /source && \
wget http://ceres-solver.org/ceres-solver-1.10.0.tar.gz && \
tar xvzf ceres-solver-1.10.0.tar.gz && \
cd /source/ceres-solver-1.10.0 && \
mkdir -p build && cd build && \
cmake .. -DCMAKE_C_FLAGS=-fPIC -DCMAKE_CXX_FLAGS=-fPIC -DBUILD_EXAMPLES=OFF -DBUILD_TESTING=OFF && \
make install && \
cd / && \
rm -rf /source/ceres-solver-1.10.0 && \
rm -f /source/ceres-solver-1.10.0.tar.gz
# Install opengv from source
RUN \
mkdir -p /source && cd /source && \
git clone https://github.com/paulinus/opengv.git && \
cd /source/opengv && \
mkdir -p build && cd build && \
cmake .. -DBUILD_TESTS=OFF -DBUILD_PYTHON=ON && \
make install && \
cd / && \
rm -rf /source/opengv
#Clone the OpenSfM Repository
RUN git clone https://github.com/mapillary/OpenSfM.git
#Add additional functions that for some reason didn't come with the docker file
Run apt-get update \
&& apt-get install python-networkx \
python-exif \
python-xmltodict
#Automatically build OpenSfM so that its prebuilt in the docker
Run cd OpenSfM && python setup.py build
我得到的官方回复:
嗨@walter,
有两种方式运行安装opensfm,有或没有docker。
如果要使用docker,则无需运行pythonsetup.py构建。而是使用
构建 docker 图像
cd path/to/OpenSfM
docker build -t mapillary/opensfm .
然后 运行 使用
docker run -ti mapillary/opensfm /bin/sh -c "bin/run_all data/berlin"
请注意,这将在 docker 容器内创建重建。您将需要一些 docker 知识来将本地文件夹映射到 docker 图像内的文件夹,以便我们可以在外部访问结果。
另一种选择是不使用 docker。在这种情况下,您需要在 ubuntu 机器上安装依赖项,请参阅 https://github.com/mapillary/OpenSfM#installing-dependencies-on-ubuntu。完成后你将能够 运行 python setup.py build
希望这对您有所帮助,
保罗
我在 windows 和 python 3 的 docker 上遇到了同样的错误。
解决这个问题;
我已经将 https://raw.githubusercontent.com/paulinus/opensfm-docker-base/master/Dockerfile.python3 构建为 "paulinus/opensfm-docker-base:latest" 图像。
我创建了 Dockerfile 如下;
FROM paulinus/opensfm-docker-base:latest
RUN pip3 install joblib
RUN git clone https://github.com/mapillary/OpenSfM.git && cd OpenSfM && git submodule update --init --recursive && python3 setup.py build
由于某些原因,必需的 python 模块中缺少 joblib,当您想要 运行 命令(例如 "bin/opensfm_run_all data/berlin"
时会产生错误
由 "pybind11_add_module" 引起的 cmake 错误已通过 "git submodule update --init --recursive" 命令解决。 (检查 https://github.com/patrikhuber/eos/issues/127 上的问题)
- 然后我建了它
docker build -t opensfm-python3 .
现在 opensfm 在 windows 中的 docker 容器上工作。
docker run -it opensfm-python3 bash
或者您可以 运行 docker 容器外的命令,如下所示;
docker run -it opensfm-python3 bash -c "cd OpenSfM && bin/opensfm_run_all data/berlin"
我在构建 OpenSFM 时遇到问题。 运行 setup.py 文件中出现错误。
首先,我在 VirtualBox 上 运行 Ubuntu 16.04。我安装了 Docker 和 运行
docker pull freakthemighty/opensfm
此镜像构建成功。
此外,我将 OpenSFM 存储库从 here 克隆到我的主文件夹中。
下一步,我应该通过 运行 在主文件夹中构建:
python setup.py build
这是产生的错误
walter@VirtualUbuntu:~$ python setup.py build
Configuring...
Traceback (most recent call last):
File "setup.py", line 21, in <module>
subprocess.Popen(['cmake','../opensfm/src'], cwd='cmake_build').wait()
File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1343, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
Here 是有问题的 setup.py 文件。
我最终自己构建了 Dockerfile。我添加了最后几个步骤来让它工作并自动构建 OpenSfM。
我先克隆存储库,然后添加几个缺少的包,然后自动构建 setup.py 文件。
FROM ubuntu:16.04
# Install apt-getable dependencies
RUN apt-get update \
&& apt-get install -y \
build-essential \
cmake \
git \
libatlas-base-dev \
libboost-python-dev \
libeigen3-dev \
libgoogle-glog-dev \
libopencv-dev \
libsuitesparse-dev \
python-dev \
python-numpy \
python-opencv \
python-pip \
python-pyexiv2 \
python-pyproj \
python-scipy \
python-yaml \
wget \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Install Ceres from source
RUN \
mkdir -p /source && cd /source && \
wget http://ceres-solver.org/ceres-solver-1.10.0.tar.gz && \
tar xvzf ceres-solver-1.10.0.tar.gz && \
cd /source/ceres-solver-1.10.0 && \
mkdir -p build && cd build && \
cmake .. -DCMAKE_C_FLAGS=-fPIC -DCMAKE_CXX_FLAGS=-fPIC -DBUILD_EXAMPLES=OFF -DBUILD_TESTING=OFF && \
make install && \
cd / && \
rm -rf /source/ceres-solver-1.10.0 && \
rm -f /source/ceres-solver-1.10.0.tar.gz
# Install opengv from source
RUN \
mkdir -p /source && cd /source && \
git clone https://github.com/paulinus/opengv.git && \
cd /source/opengv && \
mkdir -p build && cd build && \
cmake .. -DBUILD_TESTS=OFF -DBUILD_PYTHON=ON && \
make install && \
cd / && \
rm -rf /source/opengv
#Clone the OpenSfM Repository
RUN git clone https://github.com/mapillary/OpenSfM.git
#Add additional functions that for some reason didn't come with the docker file
Run apt-get update \
&& apt-get install python-networkx \
python-exif \
python-xmltodict
#Automatically build OpenSfM so that its prebuilt in the docker
Run cd OpenSfM && python setup.py build
我得到的官方回复:
嗨@walter,
有两种方式运行安装opensfm,有或没有docker。
如果要使用docker,则无需运行pythonsetup.py构建。而是使用
构建 docker 图像cd path/to/OpenSfM
docker build -t mapillary/opensfm .
然后 运行 使用
docker run -ti mapillary/opensfm /bin/sh -c "bin/run_all data/berlin"
请注意,这将在 docker 容器内创建重建。您将需要一些 docker 知识来将本地文件夹映射到 docker 图像内的文件夹,以便我们可以在外部访问结果。
另一种选择是不使用 docker。在这种情况下,您需要在 ubuntu 机器上安装依赖项,请参阅 https://github.com/mapillary/OpenSfM#installing-dependencies-on-ubuntu。完成后你将能够 运行 python setup.py build
希望这对您有所帮助, 保罗
我在 windows 和 python 3 的 docker 上遇到了同样的错误。
解决这个问题;
我已经将 https://raw.githubusercontent.com/paulinus/opensfm-docker-base/master/Dockerfile.python3 构建为 "paulinus/opensfm-docker-base:latest" 图像。
我创建了 Dockerfile 如下;
FROM paulinus/opensfm-docker-base:latest
RUN pip3 install joblib
RUN git clone https://github.com/mapillary/OpenSfM.git && cd OpenSfM && git submodule update --init --recursive && python3 setup.py build
由于某些原因,必需的 python 模块中缺少 joblib,当您想要 运行 命令(例如 "bin/opensfm_run_all data/berlin"
时会产生错误由 "pybind11_add_module" 引起的 cmake 错误已通过 "git submodule update --init --recursive" 命令解决。 (检查 https://github.com/patrikhuber/eos/issues/127 上的问题)
- 然后我建了它
docker build -t opensfm-python3 .
现在 opensfm 在 windows 中的 docker 容器上工作。
docker run -it opensfm-python3 bash
或者您可以 运行 docker 容器外的命令,如下所示;
docker run -it opensfm-python3 bash -c "cd OpenSfM && bin/opensfm_run_all data/berlin"