如何在Ubuntu 20.04上构建和安装pylucene。

3

我正在尝试在我的WSL Ubuntu 20.04干净安装上安装Pylucene。我尝试按照官方网站的教程进行安装,但看起来已经过时了。所以我想知道这里是否有人成功在Ubuntu 20.04和Python 3.8.2上安装过。

我运行的命令:

sudo apt-get upgrade
sudo apt-get install -y default-jdk ant build-essential python3-dev
mkdir pylucene
cd pylucene
curl https://downloads.apache.org/lucene/pylucene/pylucene-8.3.0-src.tar.gz | tar -xz --strip-components=1
cd jcc
export JCC_JDK=/usr/lib/jvm/default-java
python3 setup.py build

在这里失败了:

...
building 'jcc3' extension
x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -D_jcc_lib -DJCC_VER="3.7" -I/usr/lib/jvm/default-java/include -I/usr/lib/jvm/default-java/include/linux -I_jcc3 -Ijcc3/sources -I/usr/include/python3.8 -c jcc3/sources/jcc.cpp -o build/temp.linux-x86_64-3.8/jcc3/sources/jcc.o -DPYTHON -fno-strict-aliasing -Wno-write-strings
x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -D_jcc_lib -DJCC_VER="3.7" -I/usr/lib/jvm/default-java/include -I/usr/lib/jvm/default-java/include/linux -I_jcc3 -Ijcc3/sources -I/usr/include/python3.8 -c jcc3/sources/JCCEnv.cpp -o build/temp.linux-x86_64-3.8/jcc3/sources/JCCEnv.o -DPYTHON -fno-strict-aliasing -Wno-write-strings
x86_64-linux-gnu-g++ -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fwrapv -O2 -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 build/temp.linux-x86_64-3.8/jcc3/sources/jcc.o build/temp.linux-x86_64-3.8/jcc3/sources/JCCEnv.o -o build/lib.linux-x86_64-3.8/libjcc3.so -L/usr/lib/jvm/default-java/jre/lib/amd64 -ljava -L/usr/lib/jvm/default-java/jre/lib/amd64/server -ljvm -Wl,-rpath=/usr/lib/jvm/default-java/jre/lib/amd64:/usr/lib/jvm/default-java/jre/lib/amd64/server -Wl,-S
/usr/bin/ld: cannot find -ljava
/usr/bin/ld: cannot find -ljvm
collect2: error: ld returned 1 exit status
error: command 'x86_64-linux-gnu-g++' failed with exit status 1

我计划之后要运行的命令:

sudo python3 --preserve-env=JCC_JDK setup.py install
cd ..
make
make test
sudo make install

你检查过在-L选项中提到的任何路径或者系统中其他地方是否存在libjava.solibjvm.so吗? - bracco23
我不确定如何做到这一点,说实话。 - Joozty
我建议进入/usr/lib/jvm文件夹并执行搜索,以查看是否可以在任何地方找到该文件(简单的find . -name "libjvm.so"就足够了)。之后,一旦您知道它们在哪里,您可以找到应设置什么附加环境变量以使设置正确地找到它们(我怀疑JCC_JDK指向错误的目录,但我无法证明)。 - bracco23
3个回答

1
以下是在Ubuntu 18.04上成功安装pylucene的步骤 - 这可能适用于您:
1. 安装openjdk-8: ``` apt install openjdk-8-jre openjdk-8-jdk openjdk-8-doc ``` 确保您已经安装了ant,如果没有,请运行`apt install ant`。请注意,如果您安装了不同版本的openjdk,则需要将其删除或运行`update-alternatives`以使用版本1.8.0。
2. 使用`java -version`检查Java版本是否为1.8.0*。
3. 在安装openjdk-8之后创建一个符号链接(您稍后会用到)。
cd /usr/lib/jvm
ln -s java-8-openjdk-amd64 java-8-oracle

4. 安装python-dev:sudo apt install python-dev。在我的情况下,Python 3不能正常工作,所以我最终使用了Python 2。但这可能不是问题的实际原因,所以您可以尝试Python 3。如果您选择Python 3,则在下面的命令中使用python3而不是python。 5. 安装JCC(在您的pylucene文件夹的jcc子文件夹中):
python setup.py build
python setup.py install

你在步骤3中创建的符号链接对此很有帮助,因为该路径是硬编码到setup.py中的-你可以检查一下。
从pylucene文件夹的根目录安装pylucene。 编辑Makefile,根据你的设置取消注释/编辑变量。 在我的情况下,它是这样的。
PREFIX_PYTHON=/usr
ANT=ant
PYTHON=$(PREFIX_PYTHON)/bin/python
JCC=$(PYTHON) -m jcc --shared
NUM_FILES=10


然后运行。
make
make test
sudo make install
  1. 如果您看到与JCC共享模式相关的错误,请从Makefile中删除--shared

0
我为PyLucene 8.11.0、Python 3.9、JDK11(default-jdk)和ubuntu 20.04(focal)编写了这个dockerfile。您可以使用您喜欢的Python包管理器,如Poetry、Pipenv或Conda等进行扩展。 Dockerfile
FROM ubuntu:focal

ARG PYTHON_VERSION=3.9
ARG PYLUCENE_VERSION=8.11.0

# Uncomment to install specific version of poetry
ENV LANG=C.UTF-8

# ADD Python PPA Repository
RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y --no-install-recommends \
        software-properties-common gpg-agent && \
    add-apt-repository ppa:deadsnakes/ppa && \
    apt-get update && \
    apt-get remove -y software-properties-common && \
    apt-get purge --auto-remove -y && \
    apt-get clean

RUN which gpg-agent

# Install Python
RUN apt-get install -y --no-install-recommends \
        "python$PYTHON_VERSION-dev" \
        python3-setuptools \
        python3-pip && \
    apt-get remove -y gpg-agent && \
    apt-get purge --auto-remove -y && \
    apt-get clean

# ======================== START OF ADDITIONAL INSTALLATION ========================

# Install Java
RUN apt-get install -y --no-install-recommends \
    build-essential \
    ant \
    jcc \
    curl \
    git \
    default-jdk 
    
RUN ls /usr/bin/ | grep "python"
RUN ln -s $(which python3.9) /usr/bin/python

RUN which python3.9 && which python && python --version

WORKDIR /usr/lib/jvm/default-java/jre/lib
RUN ln -s ../../lib amd64

# Java 11
RUN java --version && javac --version


# Installing PyLucene
RUN which ant && ant -version

RUN apt-get install -y --no-install-recommends \
    libffi-dev \
    zlib1g-dev

WORKDIR /usr/src/pylucene
RUN curl https://dlcdn.apache.org/lucene/pylucene/pylucene-$PYLUCENE_VERSION-src.tar.gz | tar -xz


ENV PREFIX_PYTHON=/usr \
    JCC_JDK=/usr/lib/jvm/default-java \
    ANT=ant \
    JCC='python -m jcc' \
    NUM_FILES=10 \
    PYTHON=python \
    NO_SHARED=1

RUN cd "pylucene-$PYLUCENE_VERSION/lucene-java-$PYLUCENE_VERSION/lucene" && \
    ant ivy-bootstrap && \
    ant && \
    cd ../../../

RUN cd "pylucene-$PYLUCENE_VERSION/jcc" && \
    ls -la && \
    NO_SHARED=1 JCC_JDK=/usr/lib/jvm/default-java python setup.py build && \
    NO_SHARED=1 JCC_JDK=/usr/lib/jvm/default-java python setup.py install && \
    cd .. && \
    make JCC="python -m jcc" ANT=ant PYTHON=python NUM_FILES=8&& \
    make install JCC="python -m jcc" ANT=ant PYTHON=python NUM_FILES=8 && \
    cd ../../

RUN apt-get remove -y gpg-agent ant jcc build-essential && \
    apt-get purge --auto-remove -y && \
    apt-get clean

WORKDIR /usr/src
RUN rm -rf pylucene

RUN python -c "import lucene; lucene.initVM()"

# ======================== END OF ADDITIONAL INSTALLATION ========================

WORKDIR /app
COPY . .

0

确认了@code-your-dream发布的答案也适用于Python3(特别是在Ubuntu 18.04.1中)

对我来说,以这种方式安装jcc很重要。我尝试通过conda安装,但在pylucene的制作过程中出现了冲突。

在我的情况下,还需要修改jcc的setup.py文件,将 'linux': ['-fno-strict-aliasing', '-Wno-write-strings'], 改为 'linux': ['-fno-strict-aliasing', '-Wno-write-strings','-D__STDC_FORMAT_MACROS'], 如在此其他线程Issue with installing PyLucene 6.5.0 on Linux中提到的。

要确认所需的Java版本(在我的情况下也是8,不适用于11),您可以在pylucene文件夹/jcc/setup.py中搜索JDK = {...}块。在我的情况下,参考: 'linux': '/usr/lib/jvm/java-8-oracle',


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接