Skip to content

Instantly share code, notes, and snippets.

@0xnurl
Created March 14, 2018 13:27
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 0xnurl/6f97eb39409ea48db31fe315fd1e208f to your computer and use it in GitHub Desktop.
Save 0xnurl/6f97eb39409ea48db31fe315fd1e208f to your computer and use it in GitHub Desktop.
Compile OpenFST Python Extension for Python 3
FROM ubuntu:16.04
# Use bash (Ubuntu default is dash)
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
# Ubuntu packages
RUN apt-get update && apt-get install -y ssh gcc=4:5.3.1-1ubuntu1 g++=4:5.3.1-1ubuntu1 make vim zlib1g-dev libbz2-dev libssl-dev python-dev man libreadline-dev build-essential libreadline-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev python3 python3-dev
# Install Python 3.6 from source for optimizations
RUN cd /tmp && wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz && tar xzvf Python-3.6.0.tgz && cd Python-3.6.0 && ./configure && make && make install && cd /tmp && wget https://bootstrap.pypa.io/get-pip.py && python3 get-pip.py
# Create virtualenv for Python 3.6
RUN pip3 install virtualenv && cd ~ && virtualenv -p $(which python3) venv
# Compile OpenFST with Python extension for Python 3 and Install
RUN wget http://www.openfst.org/twiki/pub/FST/FstDownload/openfst-1.6.6.tar.gz && tar xzvf openfst-1.6.6.tar.gz && cd openfst-1.6.6/ && pushd ./src/extensions/python/ && mv pywrapfst.cc pywrapfst.cc.py2bkup && vim -c ":1755" -c ':s/"write/b"write' -c ":wq" pywrapfst.pyx && pip3 install cython && cython -f --cplus -3 pywrapfst.pyx -o pywrapfst.cc && popd && ./configure --enable-far --enable-python && vim -c ":%s/PYTHON_CPPFLAGS = -I\/usr\/include\/python2.7/PYTHON_CPPFLAGS = -I\/usr\/local\/include\/python3.6m/" -c ":%s/PYTHON_LDFLAGS = -L\/usr\/lib\/python2.7 -lpython2.7/PYTHON_LDFLAGS = -L\/usr\/local\/lib\/python3.6/" -c ":%s/PYTHON_SITE_PKG = \/usr\/lib\/python2.7/PYTHON_SITE_PKG = \/root\/venv\/lib\/python3.6\/site-packages/" -c ":%s/PYTHON_VERSION = 2.7/PYTHON_VERSION = 3.6/" -c ":%s/lib\/python2.7\/dist-packages/lib\/python3.6\/site-packages/" -c ":wq" ./src/extensions/python/Makefile && make && make install && cp /usr/local/lib/python3.6/site-packages/pywrapfst.* /root/venv/lib/python3.6/site-packages/ && echo 'export LD_LIBRARY_PATH="/usr/local/lib/fst/:/usr/local/lib/:$LD_LIBRARY_PATH"' >> ~/.bashrc
##########
# Result
# A virtual environment with Python 3 will be created in /root/venv and will have the python OpenFST extension properly installed
##########
@shuttle1987
Copy link

I'm glad you managed to get this together because I'm currently working on a project that may need to install this (https://github.com/persephone-tools/) and we are are using exclusively Python 3.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment