Как опубликовать двоичные диски Python для Linux на локальной машине - PullRequest
0 голосов
/ 05 июня 2018

У меня есть пакет, содержащий расширения C, которые я хотел бы загрузить в pypi: https://github.com/Erotemic/netharn

Я собрал колесо в Ubuntu 18.04 с помощью команды python setup.py bdist_wheel --py-limited-api=cp36, но когда я отправился на загрузку с twine upload --skip-existing dist/*, но затем я получаю сообщение об ошибке, что у него есть неподдерживаемый тег платформы:

HTTPError: 400 Client Error: Binary wheel 'netharn-0.0.4-cp36-abi3-linux_x86_64.whl' has an unsupported platform tag 'linux_x86_64'. for url: https://upload.pypi.org/legacy/

После небольшого поиска я обнаружил, что PEP 513 требует сборки колеса для поддержки manylinux (он же Centos5): https://github.com/pypa/manylinux

Здесь приведен пример: https://github.com/pypa/python-manylinux-demo/blob/master/travis/build-wheels.sh

Однако все примеры, которые я могу найти, всегда строят свои двоичные файлы с использованием какого-либо CI-сервера.Если возможно, я хотел бы иметь возможность строить их на месте.Я подумал, что должно быть просто скопировать команды докера и собрать его в контейнере докера на моей собственной машине.Однако у меня есть проблемы.(Я гарантировал, что все существующие каталоги build и dist в репозитории были удалены)

Первое, что я сделал, это бросил себя в сеансе интерактивного докера, чтобы я мог играть с вещами.Я выбрал образ x8_64 и подключил локальный каталог к ​​своему хранилищу кода на /io на докере.Затем я начал интерактивную сессию Bash.

REPO_DPATH=$HOME/code/netharn
DOCKER_IMAGE=quay.io/pypa/manylinux1_x86_64
PRE_CMD=""
# Interactive test
docker run -it --rm -v $REPO_DPATH:/io $DOCKER_IMAGE $PRE_CMD bash

Внутри докера я сначала хотел построить колесо для python36 (на самом деле это единственный Python, который я заинтересован в поддержке на данный момент).

PYBIN=/opt/python/cp36-cp36m/bin/

Простая установка файла require.txt не сработала, поэтому я сначала вручную установил несколько пакетов.После этого (imgaug был виновником, потому что он опирается на конкретную главную сборку), казалось, установился файл require.txt.

    cd /io
    "${PYBIN}/pip" install opencv_python
    "${PYBIN}/pip" install Cython
    "${PYBIN}/pip" install pytest
    "${PYBIN}/pip" install -e git+https://github.com/aleju/imgaug.git@master#egg=imgaug
    "${PYBIN}/pip" install torch  # this is in the requirements.txt, but will cause problems later
    "${PYBIN}/pip" install -r requirements.txt

Затем я запускаю команду wheel и связываю внешние общие библиотеки в wheel

"${PYBIN}/pip" wheel /io/ -w wheelhouse/
for whl in wheelhouse/*.whl; do
    auditwheel repair "$whl" -w /io/wheelhouse/
done

Последний шаг - установка пакета и проверка

    "${PYBIN}/pip" install netharn --no-index -f /io/wheelhouse

    (cd "$HOME"; "${PYBIN}/python" -m xdoctest netharn all)

Тем не менее, когда я тестирую его, я получаю

ImportError: /opt/python/cp36-cp36m/lib/python3.6/site-packages/torch/_C.cpython-36m-x86_64-linux-gnu.so: ELF file OS ABI invalid

Я думаю, это потому, что torch не поддерживает Centos5.Чего я не понимаю, так это то, как torch удается загрузить общую библиотеку cpython-36m-x86_64-linux-gnu.so в pypi, но у меня возникают проблемы?

...