Ошибка импорта: cyvcf2.so: неопределенный символ: aaf в Ubuntu18.04. Встроенная функция отсутствует в .so файле - PullRequest
0 голосов
/ 21 февраля 2020

У меня странная ошибка при попытке импортировать cyvcf2. Я получаю:

Traceback (most recent call last):
  File "test.py", line 1, in <module>
    import cyvcf2
  File "/usr/local/lib/python2.7/dist-packages/cyvcf2/__init__.py", line 1, in <module>
    from .cyvcf2 import (VCF, Variant, Writer, r_ as r_unphased, par_relatedness,
ImportError: /usr/local/lib/python2.7/dist-packages/cyvcf2/cyvcf2.so: undefined symbol: aaf

Если я использую вместо этого debian-buster, то я не получаю ошибку.

Минимальный Dockerfile, который работает:

FROM python:2.7.17-slim-buster

WORKDIR /opt/example
RUN apt-get update && apt-get install -y \
  build-essential \
  libbz2-dev \
  libcurl4-openssl-dev \
  liblzma-dev \
  libssl-dev \
  lzma-dev 

RUN pip install cyvcf2
RUN echo "import cyvcf2" > test.py
RUN python test.py

Минимальный Dockerfile что не получается:

FROM ubuntu:18.04

WORKDIR /opt/example
RUN apt-get update && apt-get install -y \
  build-essential \
  libbz2-dev \
  libcurl4-openssl-dev \
  liblzma-dev \
  libssl-dev \
  lzma-dev \
  python \
  python-pip

RUN pip install cyvcf2
RUN echo "import cyvcf2" > test.py
RUN python test.py

Есть идеи, почему это происходит?

Я заметил, что aaf определен как встроенная функция в заголовочном файле в установленном пакете:

// internal calculate of alternate allele frequency.
inline float aaf(int *gt_types, int32_t n_samples){
    float af = 0;
    int i, n_called = 0;

    for (i = 0; i < n_samples; i++){
        if(gt_types[i] == _UNKNOWN){
            continue;
        }
        af += gt_types[i];
        n_called += 1;
    }
    return af / (float)(2 * n_called);
}

Должна ли встроенная функция быть в файле .so?

[Редактировать] Если я удалю ключевое слово "inline" из этой функции и одно другое из файла relatedness.h, тогда я смогу скомпилировать и установить пакет с помощью pip install -e. и работает нормально.

Почему разные ОС влияют на поведение встроенной функции?

...